Maven 部署时包含源码
🏷️ Maven
使用 mvn deploy
部署时,默认是不包含源码的。若想包含源码,只需以如下的方式添加 maven-source-plugin 插件的配置即可。
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
需要注意的参数有两个:
phase:这个是配置插件绑定到 maven 的哪个生命周期。
一般设置为 verify ,这样可以保证 install 到本地和 deploy 到仓库时都包含源码。
一个标准的生命周期是按照如下顺序执行的:
- 验证 validate
- 编译 compile
- 测试 test
- 打包 package
- 检查 verify
- 安装 install
- 部署 deploy
goal:用来配置在 phase 中绑定的生命周期结束后运行的 maven-source-plugin 插件的 goal 。
需要注意的是,goal 在生命周期结束后执行。
比如若配置为 deploy ,此时虽然本地会生成 -sources.jar 文件,但仓库中却并没有上传。这是因为在执行部署处理时,maven-source-plugin 插件的 goal 还没有被执行,自然也就没法上传源码文件。
maven-source-plugin 插件总共提供了 7 个 goal ,常用的是下面几个(其他的详见官方文档)。
- source:jar is used to bundle the main sources of the project into a jar archive.
- source:test-jar on the other hand, is used to bundle the test sources of the project into a jar archive.
- source:jar-no-fork is similar to jar but does not fork the build lifecycle.
- source:test-jar-no-fork is similar to test-jar but does not fork the build lifecycle.
官方文档中推荐使用 jar-no-fork 和 test-jar-no-fork 。
另外,关于 jar 和 jar-no-fork 的区别可以参考 StackOverflow 上的回复 。
附1. 库源与类 ClassName 的字节码不符
使用 lombok 组件时,由于生成的代码和实际的代码有差别,导致在打开此类源码文件时会有 库源与类 ClassName 的字节码不符 的提示。
找到有个 lombok-maven-plugin 的插件貌似可以解决这个问题。不过稍微试了下,貌似没啥效果。现在这样虽然有个错误消息,但也不影响使用,以后空了再调查。