Minecraft(我的世界)中文论坛

标题: 让你的插件开发更轻松——IDEA+Maven开发插件

作者: wjwrh    时间: 2020-3-28 20:47
标题: 让你的插件开发更轻松——IDEA+Maven开发插件
本帖最后由 wjwrh 于 2020-6-16 08:20 编辑

使用IntelliJ IDEA&Maven开发插件

目录

一、前言

二、下载IDEA

三、创建项目

四、IDEA&Maven代理的设置

五、Maven的配置

六、实战演示

七、Q&A

更新日志


其它

个人推荐阅读我提供的pdf版本,然后应该会在未来不远的时间内将其同步到我的博客上



作者: wjwrh    时间: 2020-3-29 08:42
本帖最后由 wjwrh 于 2020-5-7 22:29 编辑

一、前言

不知道各位开发插件使用的是什么IDE,eclipse? NetBeans?还是IDEA?相信各位应该对JetBrains全家桶有所耳闻,这也是(我自认为)目前最好的Java IDE,其拥有丰富的插件,具有极强的可扩展性,而且还有很多实用的功能,可以让程序员的生活更加美好。为了方便各位刚刚接触插件的开发者,节省他们因为不称手的工具而浪费的时间,我写下了这篇IDEA + Maven教程,因为,真的是太好用啦!

1. 注意事项


2.什么是IDEA?

IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由 JetBrains 软件公司(前称为 IntelliJ)开发,提供Apache 2.0开放式授权的社区版本以及专有软件的商业版本。(什么是IDE? 可以理解为一个工具包,包含了编辑器、编译器、调试器等工具,一条龙服务,使用起来更方便)

3.什么是Maven?


4.为什么我们需要Maven?

因为你需要一个更好地管理依赖的方式,Maven能够提供依赖包的结构化管理,而且Maven也有丰富的plugin,可以实现更多更强大的功能


作者: wjwrh    时间: 2020-3-29 08:44
本帖最后由 wjwrh 于 2020-3-29 13:49 编辑

二、下载IDEA

IDEA分为两个版本,一个是免费的community版本,一个是收费的ultimate版本


本教程会以收费版IDEA Ultimate 2019.3.4为例进行讲解,如果访问或下载过慢可以使用梯子下载,个人推荐使用Toolbox APP,可以更好的管理Jetbrains的各种IDE


特别注意,如果你是大学生,且你们学校提供了学生邮箱以.edu或.edu.cn结尾,那么你很有可能能白嫖到Jetbrains全家桶!这个是真的香,因为他家别的IDE也十分好用,例如PyCharmWebStorm等等


如果你的学校学生邮箱不可用,你可以去JetBrains/swot项目提pr


作者: wjwrh    时间: 2020-3-29 08:45
本帖最后由 wjwrh 于 2020-4-30 18:27 编辑

三、创建项目





作者: wjwrh    时间: 2020-3-29 10:48
本帖最后由 wjwrh 于 2020-4-30 18:27 编辑

四、IDEA&Maven代理的配置


1. IDEA代理配置


2.Maven代理配置


修改完成之后就可以使用代理高速下载了~


作者: wjwrh    时间: 2020-3-29 12:26
本帖最后由 wjwrh 于 2020-4-30 18:27 编辑

五、Maven的配置

Maven的配置也是很有讲究的,在一些大型项目中会用到Maven所支持的许多特性,构建一个层次结构分明的依赖管理关系,而本教程作为一个入门教程,并不会教那些很复杂的东西,本教程的目的只有一个——读完教程之后就能够从零开始构建一个自己的插件

Step 0. 打开pom.xml

在之前创建好的项目中打开pom.xml,这个就是本项目的Maven配置文件了,以下所有关于Maven的配置都会在此文件中完成



Step 1. 设置Java源代码的编码方式以及JDK版本

pom.xml的project标签范围内添加以下代码:

  1.     <properties>
  2.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.         <maven.compiler.target>1.8</maven.compiler.target>
  4.         <maven.compiler.source>1.8</maven.compiler.source>
  5.     </properties>
复制代码

设置编码方式是为了保证跨平台的兼容性,而设置源及目标的JDK版本是为了能够正确的使用某些特性,否则你在使用lambda的时候都有可能会编译错误

Step 2. 从远程仓库添加依赖

有时插件作者会以Maven远程仓库的形式提供给你他插件的依赖,你可以在其插件的开发者文档中找到,这里以Spigot API举例,我们可以在spigot官方找到



对于尚未添加任何依赖的我们来说,直接把这一段复制进pom.xml就好了,之后Maven会询问我们是否要导入修改,我们可以手动导入,也可以开启自动导入



开始导入后,Maven就会自动拉取远程的依赖到本地,如果你没有代理的话你可能需要很久..导入成功后我们就可以在Maven->Dependencies中看到我们导入的依赖了



这里值得一提的就是dependency中的scope标签,这个标签的详解会在下面介绍,姑且让他保持现状,此外就是有多个仓库以及多个远程依赖的情况,我们只需分别在repositories中新建repository标签,在dependencies中新建dependency标签即可,效果如下



Step 3. 导入本地jar文件

有时可能插件作者并没有为你提供远程仓库,这个时候我们就需要自行导入本地的jar文件,例如我们要导入桌面上的Vault.jar文件,可进行如下操作


Step 4. 使用Shade插件

如果你引入了第三方库,那么你就需要使用maven的shade插件将你引入的第三方库一同打包进最终的jar文件中,否则你的插件会因为找不到指定的class而崩溃,Maven Shade插件是一个功能十分强大的插件,关于这个插件的详细配置十分复杂,emmmm以后可能会考虑专门讲解,现在我们只需要把下列代码直接贴进去就能用了

  1.     <build>
  2.         <plugins>
  3.             <plugin>
  4.                 <groupId>org.apache.maven.plugins</groupId>
  5.                 <artifactId>maven-shade-plugin</artifactId>
  6.                 <version>3.2.0</version>
  7.                 <configuration>
  8.                     <minimizeJar>true</minimizeJar>
  9.                     <createDependencyReducedPom>false</createDependencyReducedPom>
  10.                     <createSourcesJar>false</createSourcesJar>
  11.                     <filters>
  12.                         <filter>
  13.                             <artifact>*:*</artifact>
  14.                             <excludes>
  15.                                 <exclude>META-INF/*.SF</exclude>
  16.                                 <exclude>META-INF/*.DSA</exclude>
  17.                                 <exclude>META-INF/*.RSA</exclude>
  18.                             </excludes>
  19.                         </filter>
  20.                     </filters>
  21.                 </configuration>
  22.                 <executions>
  23.                     <execution>
  24.                         <phase>package</phase>
  25.                         <goals>
  26.                             <goal>shade</goal>
  27.                         </goals>
  28.                     </execution>
  29.                 </executions>
  30.             </plugin>
  31.         </plugins>
  32.     </build>
复制代码

Step 5.关于Scope

常用的scope一共有下列几种



作者: 克鲁鲁殿下    时间: 2020-3-30 16:22
谢谢楼主,但是目录功能是不是更好?
作者: Himmelt    时间: 2020-4-5 10:50
gradle它不香吗
作者: Nner    时间: 2020-4-5 11:21
这个插件用这一直很舒服
作者: wjwrh    时间: 2020-4-5 17:26
Himmelt 发表于 2020-4-5 10:50
gradle它不香吗

确实gradle用起来会更爽一点,但是感觉现在maven的普及度和知/名度(这个词也踩了?)都比gradle高一些
作者: sun弑星    时间: 2020-4-5 23:06
谢谢大佬
作者: 梦回繁华ac    时间: 2020-4-7 08:14
666666666666666666666666
作者: lq753951456    时间: 2020-4-30 18:15
我用idea有毒,config.yml文件生成了,内容却是空白的。
作者: wjwrh    时间: 2020-4-30 18:30
lq753951456 发表于 2020-4-30 18:15
我用idea有毒,config.yml文件生成了,内容却是空白的。

你SaveDefaultConfig()了吗
作者: lq753951456    时间: 2020-4-30 19:56
wjwrh 发表于 2020-4-30 18:30
你SaveDefaultConfig()了吗

有,我试过很多种方法config的文件都是空白的。
作者: wjwrh    时间: 2020-5-7 22:29
本帖最后由 wjwrh 于 2020-5-7 22:41 编辑

六、实战演示

场景一    从零开始自建插件

本场景的最终目的是编译出一个利用PlaceholderAPI来向每一个进入服务器的玩家发出固定问候消息的插件。插件极其简单,而且教授编写插件不是本教程的目标,所以暂不在此过多赘述。


场景二    使用他人的源代码编译插件

本场景的最终目的是完成编译两个插件,一个是上古版本停止维护的商店插件QuickShop(并非仍在活跃开发的reremake版本),一个是由多个模块组成的项目BungeeCord。前者适用于我们想要魔改某个开源软件的代码来实现自己想要的功能,后者是对模块化Maven架构的项目的一个简单的展示(暂时不会介绍技术细节)

1. QuickShop


2. BungeeCord

BC是一个由多个模块构成的项目,其源代码GitHub上进行托管


  他们的关系大概可以理解成为一种树状结构,即最外层的pom.xml是一个根节点,而每一个子模块都是它的子节点



作者: wjwrh    时间: 2020-5-7 22:30
七、Q&A

注意:本Q&A主要总结个人在码代码的过程中碰到的有关Maven的问题或者我自己认为初次接触IDEA+Maven的人会遇到的问题,如果你遇到了别的问题,可以向我提出,我会在尝试解决后将其归纳在本条目中,本条目不定期更新。

1. 'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件

这是典型的环境变量问题,大概设想一下,如果你不提前"告知"系统你的maven在哪,你还想让你的系统能够在你输入mvn时做出相应,你的系统需要做什么?你的系统需要扫描你的整个硬盘,以找到名为mvn的可以运行的程序,但是这还有一个问题,你可能装了maven2maven3,甚至装了多个版本相同的maven,操作系统要用哪一个?这显然是恨不符合逻辑也不符合现实的。因此,我们需要"告知"操作系统,你的maven装在哪。"告知"的方式就是通过环境变量。(其实会接触到插件开发的应该都已经熟知怎么配置环境变量了,不过我还是在这里啰嗦两句吧)


2. 我的依赖下面有好多红色的波浪线,打包也打包不了怎么办?

这种情况一般是因为依赖文件没有成功拖下来,请尝试点击MavenReimport按钮,并检查依赖所在的依赖仓库是否正确的添加进pom.xml中,如果都没有问题

请务必使用代理

我之前没有弄代理的时候十有**会出现这种情况,Reimport之后不管等多久,那个条就是跑不完,或者干脆没有进度条,直接就全是红色波浪线,绝大多数都是因为网络质量带来的问题,再说一遍,内地用户请务必使用代理


作者: 白叶Official    时间: 2020-5-10 22:16
额我有一个疑问,为什么不选择在帖子内写而是在评论区内写?不仅杂乱而且这也违反了规定啊
作者: dousha0v0    时间: 2020-5-11 00:35
很感谢你的帖子,给了我很大的帮助
作者: MC_longxi    时间: 2020-5-11 12:13
这个插件用这一直很舒服

作者: miracle工作室    时间: 2020-5-12 21:15
sun弑星 发表于 2020-4-5 23:06
谢谢大佬

666,支持支持
作者: 逗比M    时间: 2020-5-19 10:14
nice 很好的教程
作者: 真香小伙子    时间: 2020-7-31 17:16
楼主,图片挂了

作者: wjwrh    时间: 2020-7-31 17:23
真香小伙子 发表于 2020-7-31 17:16
楼主,图片挂了

论坛HTTP图片全挂了
去我博客看吧
https://www.mcbbs.net/plugin.php ... 1%25E7%25A8%258B%2F
作者: 天秀lllj    时间: 2020-7-31 18:26
真香小伙子 发表于 2020-7-31 17:16
楼主,图片挂了

eee,又tm见面
我服了

作者: 真香小伙子    时间: 2020-8-1 18:50
天秀lllj 发表于 2020-7-31 18:26
eee,又tm见面
我服了

是你?我佛了
作者: 真香小伙子    时间: 2020-8-1 18:52
wjwrh 发表于 2020-7-31 17:23
论坛HTTP图片全挂了
去我博客看吧
https://www.mcbbs.net/plugin.php?id=link_redirect&target=https%3A% ...

你博客打不开啊
作者: wjwrh    时间: 2020-8-1 18:53
真香小伙子 发表于 2020-8-1 18:52
你博客打不开啊

GitHub page+腾讯云CDN应该没啥问题啊。。
那你下载那个pdf吧
https://pan.baidu.com/s/1jFz51YWloyqKvCKflXpvRA
提取码vahz
作者: 真香小伙子    时间: 2020-8-1 19:49
wjwrh 发表于 2020-8-1 18:53
GitHub page+腾讯云CDN应该没啥问题啊。。
那你下载那个pdf吧
https://pan.baidu.com/s/1jFz51YWloyqKvCK ...

帮你搭建在了zxxhz.top
作者: 砚澜    时间: 2020-8-11 14:29
非常棒已收藏
作者: FloatWorld    时间: 2020-10-17 08:26
有用!!!
作者: xiaoyifu_qaq    时间: 2020-11-8 21:31
看了以后我感觉开发简单多了
作者: 1157173310    时间: 2020-11-9 15:59
xiaoyifu_qaq 发表于 2020-11-8 21:31
看了以后我感觉开发简单多了

现在可以直接从idea的插件中心下载Minecraft Development一键创建项目了
推荐用这个插件:https://plugins.jetbrains.com/plugin/8327-minecraft-development
作者: ddd321    时间: 2020-11-11 01:55
不错,感谢
作者: Robor    时间: 2020-11-26 13:04
        MCBBS有你更精彩~
作者: 莽蛇    时间: 2020-11-26 20:39
谢谢谢谢楼主
作者: LwTs    时间: 2021-1-3 16:33
感谢大佬的教程,谢谢!
作者: PbdSPds    时间: 2021-1-12 08:53
idea挺好的,就是破解起来有点麻烦
作者: Hi_zc    时间: 2021-1-12 09:44
MCBBS有你更精彩~ 优秀奖励
作者: Gillier    时间: 2021-1-27 14:33
感谢分享!!
作者: 初心545    时间: 2021-1-27 18:43
感谢大佬分享呀
作者: 754623109d    时间: 2021-1-27 22:52
66666666666666666666666666
作者: 王也丶    时间: 2021-1-28 23:50
MCBBS因你而精彩
作者: lxxboo    时间: 5 天前
确实不错2333333333333