Java Maven打包总结(Jenkins多模块编译部署)
欢迎关注个人公众号 DailyJobOps
原文地址:Java Maven打包总结(Jenkins多模块编译部署)
1、maven 打包的不一样
maven打包时,一般用到的命令有 mvn clean package, mvn clean install , mvn clean deploy 三种,具体的细节如下
- mvn clean package
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- mvn clean install
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
- mvn clean deploy
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
可以看到主要区别在把生成的jar包最终存放的位置, package只管打包; install把打好的包放到了本地maven仓库;deploy是同时放到本地仓库和远程maven私服
这里本地仓库默认是 /root/.m2/repository/
,具体配置在 ${M2_HOME}/conf/settings
的 localRepository
配置项决定。远程私服仓库一般是nexus,具体地址在项目的pom.xml中配置。比如
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://xx.xx.xxx.xxx:9009/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://xx.xx.xxx.xxx:9009/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
2、关于多模块打包
一般是进入父级目录之后执行
mvn clean install -pl ProjectName -am -Dmaven.test.skip=true
- -am 如果指定了项目列表,还要构建列表所需的项目
- -amd 如果指定了项目列表,还要构建依赖列表中项目的项目
- -pl 只编译指定的逗号分割的列表中的项目而不是所有项目。 一个项目可以通过 [groupId]:artifactId 或者它的相对路径来指定
如果是多级目录的话,有时候并不一定是按照具体的项目来
编译,比如
| - parentproject
| --- subparentproject-1
| ----- project-1-1
| ----- project-1-2
| --- subparentproject-2
| ----- project-2-1
这个时候如果一个项目一个项目来编译会超级多,很繁琐,这里是按照subparentproject
来编译,命令如下
mvn clean install -Dmaven.test.skip=true
有个注意的地方:
subparentproject
目录下的pom.xml文件中一定有类型如下的配置
<modules>
<module>project-1-1</module>
<module>project-1-2</module>
</modules>
3、Jenkins配置多模块打包
1、需要安装插件 Extended Choice Parameter Plug-In 可以支持参数单选、多选
2、项目选择"自由风格",而不是maven编译
3、在“构建” -> "执行shell" 中编写 子模块编译脚本及其后续处理
具体配置如下图
“构建” -> "执行shell" 中的处理脚本
#!/usr/bin/env bash
echo "branch to deploy: " $mybranch
echo "modules to deploy: " $submodule
echo "workspace is: " $WORKSPACE
# 如果是编译单个模块(即项目)
# cd $WORKSPACE/${submodule} && mvn clean install -Dmaven.test.skip=true
# 如果是编译多个模块,则如下处理
# 上面截图配置中是逗号分割
array=(${submodule//,/ })
for module in ${array[@]}
do
echo "Try to compile other module"
cd $WORKSPACE/${module} && mvn clean install -Dmaven.test.skip=true
done
附加:
image.png