Minecraft(我的世界)中文论坛

标题: [Tutorial][Bukkit][UD|PCD]如何利用Maven来管理你的插件

作者: 602723113    时间: 2017-7-27 13:06
标题: [Tutorial][Bukkit][UD|PCD]如何利用Maven来管理你的插件
本帖最后由 602723113 于 2017-10-7 19:52 编辑

《如何利用Maven来管理你的插件》

目录:
  • 导读
  • Maven概述
  • 创建你的Maven项目
  • 编写你的Maven项目
  • 构建你的Maven项目

(蜜汁工整233)


Maven概述

什么是Maven?
  • Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 —— 来源于百度百科

为什么要使用Maven?
  • 在一个长期的开发过程中,使用构建系统会大大简化你和想要参与协助开发的其他人的开发流程。 —— 来源于Sponge#构建系统

导读

在阅读本教程之前请确保你已有Maven的相关知识与BukkitAPI相关的内容,还有Java基础知识

本教程使用的Maven版本为3.5版本,IDE为Eclipse - Oxygen,JDK版本为1.8.0_77,使用的核心为SpigotAPI 1.12-R0.1-SNAPSHOT...
[emmm现在国内也没多少服务器是craftbukkit的吧所以就选择用spigotapi了2333(spigotapi内含bukkitapi)]

Maven的环境配置本教程不做相关讲解(谁叫网上有这么多教程呢233)

这里给出Maven的下载地址: http://maven.apache.org/download.cgi



创建你的Maven项目

在开始编写代码之前你需要创建你的Maven项目
那么我们需要点击Eclipse上的
  File(文件) ---> New(新建) ---> Others(其他)



之后我们选择其中的Maven下的Maven Project(Maven项目)



之后呢在这里我们需要把Create a simple project给打上勾



之后下一步界面是设定你的Maven项目的相关信息
Artifact >
  • GroupId -> 你在Maven的GroupId,不过一般是选择自己的域名或包名什么的
  • ArtifactId -> 填写你插件的英文名称(也就是插件名)
  • Version -> 你项目的版本(这个自己看吧=w=)
  • Packaging -> 打包成什么格式(默认为jar即可)
之后点击Fininsh(完成)



创建好Maven项目后你就会发现是这样的

来解释一下这些意思吧
  src/main/java                  用于存放Java程序的代码
  src/main/resources          用于存放非程序代码,如配置文件
  src/test/java[resources]   用于存放测试用例
  JRE Sysem Library           这个就别解释了吧=w=
  src                                 所有源代码的根目录
  target                             用于存放构建完成后的插件
  pom.xml                         emmm...Maven基础=w=

之后我们点开pom.xml, 之后点击pom.xml

为其进行配置所引用的jar包
在 <version>xxx</version> 下方另起一行 写入以下内容
<repositories>
  <repository>
   <id>spigot-repo</id>
  <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
  </repository>
</repositories>
<dependencies>
  <!--SpigotAPI -->
  <dependency>
   <groupId>org.spigotmc</groupId>
   <artifactId>spigot-api</artifactId>
   <version>1.12-R0.1-SNAPSHOT</version>
   <scope>provided</scope>
  </dependency>
</dependencies>
之后我们保存一下,然后Maven就会开始为我们下载所需jar包了

编写你的Maven项目

那么我们创建好了我们的Maven项目之后就要开始往里面写东西了
和往常不同的是我们需要在
  •   "src/main/java" 里面创建我们的包还有类


  •   "src/main/resource" 里面存放我们的配置文件如plugin.yml或者config.yml



剩下的我就不用多说了吧你们懂的=w=


构建你的Maven项目

那么我们已经写好了代码就应该开始构建我们的Maven项目了
先在Eclipse左边的Package Explorer(包资源管理器)选中我们的项目


之后点击运行按钮旁边的倒三角,然后我们选中其中的Maven Install
之后Maven就会为我们开始构建了

第一次构建可能会需要些时间请耐心等待(因为它要下那些构建jar包的东西)

那么构建好之后控制台提示了 BUILD SUCCESS 是则构建成功!

那么我们看target的时候有可能旁边没有一个箭头符号,不过不要紧我们只需要新该项目即可!

刷新之后我们就可以看到构建好之后的jar包了


之后我们丢入服务器看看效果:


结束

一些资源:

那么教程就到这里结束了,如果有发现教程内有纰漏欢迎指出

下面置顶帖有相关补充欢迎查看


我要去看好康的

本教程完工于
2017/7/27
如需转载请站内PM


作者: leavessoft    时间: 2017-7-27 13:11
hhh,从头到尾看了一遍,表示Java萌新不知道什么是Maven……
作者: 海螺螺    时间: 2017-7-27 13:21
本帖最后由 754503921 于 2017-7-30 19:18 编辑
暴力续:1楼教程

应一楼之意排的版
为什么要使用 Maven 呢?
因为如果你跟别人共享项目后,你 Pull 之后,另一个合作伙伴同步后必须全部更改所有的构建路径,除非你们两个的第三方 JAR 全部放在同一个路径,否则就全部是红线。(虽然可以写 .gitignore)
因为如果你导入了什么第三方包,你的队友没有导入,可能他就会一脸懵逼,而使用 Maven 就可以自动下载。



从普通项目转换到 Maven 项目

或许有人看了莫老的教程,就要想了:我的项目开发这么久了,怎么还要新建项目,还要复制一遍源码,好麻烦,ETC。
其实不用,你只需要使用“转换至 Maven 项目”功能即可!
我拿这个废弃的项目作为例子:
这是一个用 Eclipse 创建的中规中矩的 Java项目,没有 Maven。我们可以这样转换:
然后会弹出这个界面:
那么,按照一般的情况
  • Group ID 写你的包名
  • Artifact ID 写你的主类名
  • Version 写的骚一点
  • Name 随便写
  • Description 可以学我
当然其实这些东西可以乱写,因为构建编译的路径跟这些一点关系都没有
然后点击完成,就会弹出一些东西,你可能看不懂,但是不要惊慌,因为看得懂就不用我教了,而且我也看不懂。
你的项目文件夹下应该出现了一个 pom.xml ,这个文件管理着你使用 Maven 的所有设置,你需要使用文本编辑器打开(而不是我也看不懂的 POM 编辑器)
然后是一些不重要的项目配置设置,你不看说不定不能用 Maven



导入 Dependency

先看一楼,结构大概是这样的

插入新的 Repository 和新的 Dependency,只需要在
  1. <repositories>
  2. </repositories>
复制代码

  1. <dependencies>
  2. </dependencies>
复制代码
中间添加即可。
点击保存全部,等待 Eclipse 下载所需的库(很慢的,看网,要耐心)
我在这里提供一些常用的导入



构建你的 JAR 文件

你可以学习1楼的做法,但你也可以前往项目的目录,使用这个命令:
  1. mvn clean install package
复制代码
然后去 target 文件夹翻找。
至于为啥你不能用 mvn 命令,百度呗



Maven Shade 插件

如果你使用了第三方包,发现打包完了这些包也丢了,是不是很气。
所以你需要 Maven shade 插件
我们假设你使用了 lombokasm,你需要添加导入(自己百度去)
然后在你的 pom.xmlplugins 块添加以下信息
  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-shade-plugin</artifactId>
  4. <version>3.0.0</version>
  5. <executions>
  6. <execution>
  7. <phase>package</phase>
  8. <goals>
  9. <goal>shade</goal>
  10. </goals>
  11. <configuration>
  12. <artifactSet>
  13. <includes>
  14. <include>org.projectlombok</include>
  15. </includes>
  16. </artifactSet>
  17. <createDependencyReducedPom>false</createDependencyReducedPom>
  18. </configuration>
  19. </execution>
  20. </executions>
  21. </plugin>
复制代码
仔细观察,你会发现里面的
  1. <artifactSet>
  2. <includes>
  3. <include>org.projectlombok</include>
  4. </includes>
  5. </artifactSet>
复制代码
而这个 org.projectlombok 就是 lombok 的 groupID
并且 shade 插件会自动打包这个的前置 dependency,因为 lombok 是基于 ASM 的,所以这样做也会将 ASM 一同打包。
但是这样子打包会很大一个 JAR 就是了(Class50 是 lombok 的一个包)



添加本地 Repository

因为从Maven获得的BukkitAPI是没有 NMS 的,所以你需要添加一个本地的仓库。
  1. <dependency>
  2.       <groupId>org.bukkit</groupId>
  3.       <artifactId>bukkit</artifactId>
  4.       <version>1.0</version>
  5.       <scope>system</scope>
  6.       <systemPath>${project.basedir}/lib/bukkit.jar</systemPath>
  7.     </dependency>
复制代码


作者: 936796603    时间: 2017-8-7 22:34
很毒瘤的教程嘛
作者: 筱柒儿    时间: 2019-1-15 06:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tcaks_NB    时间: 2019-6-30 23:22
感到中国,这个是真的有用。
作者: 1313啊啊啊    时间: 2019-7-1 00:53
什么?_?东东老子学了一年Java了居然一个字也看不懂
作者: mcpanglei    时间: 2019-7-2 01:04
马文,自己写插件是不是就算了
作者: 15251827082    时间: 2019-11-19 16:42
可以的谢谢
作者: 肆火    时间: 2020-3-29 07:49
mcpanglei 发表于 2019-7-2 01:04
马文,自己写插件是不是就算了

你要是开源插件的话,用上更好一些。