{0x12} Phoenix模块开发教程:创建你的项目主类

现在,我们终于可以开始写代码啦!

这篇文章属于Phoenix Framework 入门教程的一部分。

创建主类

在IntelliJ IDEA的Project窗口中,右键java文件夹(它应该是 src > main > java)

单击 New > Java Class

Create New Class窗口中,
Name处填写你的类名。
还记得上一节中我们填写的Group IdArtifact Id吗?
你的类名最好这样填: <Group Id>.<Artifact Id>.<Mod Id>Module
Create-New-Class_051

当你创建好你的主类后,你的主类必须有 PhoenixModule 这个注解(Annotation)。这个注解能够让 Phoenix 找到你的主类。
另外,你的主类还需要继承Module这个类,这样Phoenix才能正确调用它。
下面是一个例子:

package com.lss233.tutorial;


import com.lss233.phoenix.module.Module;
import com.lss233.phoenix.module.PhoenixModule;

@PhoenixModule(modid = "mymod", name = "My First Phoenix Module", version = "1.0.0")
public class TutorialModule extends Module{
    @Override
    public void onInitial() {

    }

    @Override
    public void onEnable() {

    }

    @Override
    public void onDisable() {

    }
}

下面,我们来看看刚刚写了什么。

PhoenixModule注解

@PhoenixModule(...) 在Java中表示一个注解(Annotation)。

拓展阅读: 框架开发之Java注解的妙用

咱的这个注解向Phoenix简单介绍了一下你的模块,它的所有参数如下:

名字 描述 例子
modid 必填.你的Mod Id,这个Id必须独一无二,否则会出现冲突的情况. mymod
name 必填. 你的模块名字,主要是给使用者看的. My First Module
version 必填. 你的模块版本. 1.0.0-SNAPSHOT

Module类

注意到了吗,我们的TutorialModule类继承了Module类
这个类是一个抽象类,它会要求继承他的子类实现下面几个方法。

onInitial()

在模块被初始化时,该方法会被调用。这个时候你可以初始化一些相关配置、数据库等,以便将来调用。

onEnable()

在模块被启用时,该方法会被调用。这个时候,所有能使用的模块都已经被初始化完毕了。你可以在此时与其他模块相互连接、监听事件、注册命令等。

onDisable()

在模块被禁用时,该方法会被调用。你可以在此时进行收尾工作,比如保存配置文件、断开数据库连接、说再见等。

总结

到了目前为止,你已经成功创建了一个能够被Phoenix框架加载的模块。
可以说,你已经成功写出了一个Hello World了。

{0x11} Phoenix模块开发教程:创建你的项目

在你完成之前的准备工作之后,咱就可以开始进行Phoenix Module的开发工作了。

这篇文章属于Phoenix Framework 入门教程的一部分。

这篇文章将会引导你通过使用IntelliJ IDEAGradle 创建一个Phoenix Module项目。

0x00 介绍Gradle

Gradle是一个构建工具,它可以帮助你管理项目依赖、打包项目等。

拓展阅读: 如何通俗地理解 Gradle? - 知乎

0x01 介绍 Intellij IDEA

Intellij IDEA是一个非常好用的Java集成开发环境,由JetBrains开发,提供免费的社区版本以及专有软件的商业版本。

IntelliJ IDEA

0x02 创建

让我们打开你的IntelliJ IDEA
单击 Create New Project
选择 Gradle 分项,然后单击 Next
New-Project_046
输入你的 Group IDArtifact ID ,和 Version
你的 Group ID 通常应和你的 Java 包名相一致。如果你对两者都不了解,可以先看包名规范
你的 Artifact ID 通常应该和你的 Mod ID 一致,如 mymod
你的 Version 命名取决于你,我个人建议你了解一下语义化版本
New-Project_047
点击两次 Next 并在Project name处填写项目的名字,然后点击 Finish
New-Project_048

0x03 配置

你的IntelliJ IDEA会自动为你初始化Gradle。
你可以在它的右下方看见IntelliJ IDEA现在正在后台悄悄干什么事情。
下图表示IDEA正在下载Gradle。
-_049

对于大部分中国大陆宽带用户来说,下载Gradle是非常痛苦的一件事,慢的要命,运气不好还会下载失败!
咱建议这个时候最好还是打开科学上网工具,开个全局模式。
如果你在这一步出现了严重的问题,可以先自行安装Gradle,然后在创建项目或者创建项目后在设置之后选择你的Gradle安装路径。由于本教程既不是IntelliJ IDEA教程,也不是Gradle教程,所以略过。

设置Phoenix仓库地址

打开build.gradle,你会看到一段

repositories {
    mavenCentral()
}

我们在mavenCentral()下加一行

    maven {
        url "https://lss233.com/artifactory/PhoenixMC/"
    }

这将会让Gradle知道它能从哪里获取到PhoenixAPI。

添加依赖。

build.gradledependencies {}中,加入

compile group: 'com.lss233.phoenix', name: 'Phoenix-API', version: '+'

然后保存,你的IntelliJ IDEA就会自动在后台帮你下载依赖了。
(如果没有反应,请在弹出来的提示中点击Enable auto-import)

至此,配置结束。你的build.gradle看起来应该像这样:
PhoenixTutorial----IdeaProjects-PhoenixTutorial----PhoenixTutorial---IntelliJ-IDEA_050

补充一点东西

如果出现Gradle在你的IDEA中无法正确添加依赖的情况,可以试试下面的方法:

IntelliJ IDEA用户

build.gradle里添加 apply plugin: "idea"
然后在命令行里执行 gradle idea

Eclipse用户

build.gradle里添加 apply plugin: "eclipse"
然后在命令行里执行 gradle eclipse

关于DarkSky

DarkSky解散到现在差不多已经有半年的时间了。过了这么久,也应该有一个总结了。
其实解散在很久以前就是必然的事情,我所谓的恶性竞争只是一个借口罢了原因其实有很多:

  • 软弱。这也许是我当不成合格的领导者的主要原因。作为团队领导者,我本应该指挥大家执行任务,但是因为这个原因,我做不到。
  • 选人不严。记得当时招募了很多人,不过来越觉得没有什么用。虽然人是很多,但是真正能做事的又有哪些呢。我在选择招募的时候,基本上完全忽视了自己先前定下的规矩,以至于招到了一些没有意义的人。

总而言之,DarkSky的经历让我学到了很多,希望来年能更好地发展吧。

Nodejs下更好的本地require()

当你的Nodejs项目很大,并且有很多目录结构的时候(比如Express) 使用require()方法来载入其他文件看起来会像这样:

var logger = require('../../../utils/logger);

这也鸡儿丑了吧! 在要是日后项目结构改变了,修改也很麻烦。

解决方案

1.使用模块

安装一个模块(这里使用app-module-path作为例子。

npm i app-module-path -s

在你的项目启动文件里加入:

require('app-module-path').addPath(__dirname);

接下来,在其他文件里需要加载文件,就轻松很多了:

var logger = require('utils/logger')

注: 如果你的启动文件不在项目根目录,记得修改__dirname

2. 设置 NODE_PATH

NODE_PATH环境变量设置为项目的根目录,之后所有的载入都可以很方便地像上面那种方法了。
在启动项目之前,设置环境变量

  • Linux: export NODE_PATH=.
  • Windows: set NODE_PATH=.
    或者干脆使用cross-env,
    package.json的启动脚本中像下面这样写:
{
  "scripts": {
    "build": "cross-env NODE_PATH=. node app"
  }
}

3. 设置 Global

  1. 在项目启动文件中:
global.__base = __dirname + '/';
  1. 在另一个文件:
var logger = require(__base + 'utils/logger')

Java通过反射实例化枚举

假设我们有一个像这样的枚举:

public enum Status{
  ON,
  OFF
}

在某些情况下,我们需要通过反射的方式获得其中的某一个实例。

我们可以通过调用Enum中的valueOf方法,通过String获得枚举实例。

Class<?> statusClass = Class.forName("Status");
Method valueOfMethod = statusClass.getMethod("valueOf",String.class);
Object onStatus = valueOfMethod.invoke(null,"ON");

或者这么写:

Class<Enum> statusClass = (Class<Enum>) Class.forName("Status");
Object onStatus = Enum.valueOf(statusClass, "ON");
← 前一页 2 / 5 下一页 →

立刻订阅 Lss233's.Blog()

保持最新! 将所有最新和最棒的帖子直接发送到您的邮箱

或者订阅 我们的RSS!