Linux运维

Java Maven打包总结(Jenkins多模块编译部署)

2021-11-25  本文已影响0人  菩提老鹰

欢迎关注个人公众号 DailyJobOps

原文地址:Java Maven打包总结(Jenkins多模块编译部署)

1、maven 打包的不一样

maven打包时,一般用到的命令有 mvn clean package, mvn clean install , mvn clean deploy 三种,具体的细节如下

依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库

依次执行了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/settingslocalRepository 配置项决定。远程私服仓库一般是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

如果是多级目录的话,有时候并不一定是按照具体的项目来编译,比如

| - 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" 中编写 子模块编译脚本及其后续处理

具体配置如下图

image.png

“构建” -> "执行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

附加:

Linux Bash下字符串操作总结

image.png
上一篇下一篇

猜你喜欢

热点阅读