美文网首页Linux运维
Java Maven打包总结(Jenkins多模块编译部署)

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

作者: 菩提老鹰 | 来源:发表于2021-11-25 11:48 被阅读0次

    欢迎关注个人公众号 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/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
    
    • -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" 中编写 子模块编译脚本及其后续处理

    具体配置如下图

    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

    相关文章

      网友评论

        本文标题:Java Maven打包总结(Jenkins多模块编译部署)

        本文链接:https://www.haomeiwen.com/subject/znpatrtx.html