[Maven] 使用Maven管理多模块项目

 

我们现在通用的maven项目结构可能是这样的:

   *parent module*

         *module A*

         *module B* 

大家遇到过以下几个问题没?

1.maven多个模块之间互相依赖,一个模块更新影响另一个模块的运行;

2.maven 不小心把开发版jar包deploy到远程仓库,影响到了线上的正式环境;

3.团队有人更新了SNAPSHOT版本,你rebuild之后无法运行;

一个父模块下有几个子模块,父模块包含所有子模块的公共依赖,比如使用的日志系统;指定公共的模块版本,比如数据库驱动版本等等。

同时子模块都继承父模块,就有个很常见的问题产生,如果父模块的版本更新了,需要手动一个一个子模块修改继承的父模块的版本号,例如下面的例子:

<!--父模块版本信息-->

<version>1.1.0-SNAPSHOT</version>
    <modules>
        <module>pulldata-contract</module>
        <module>pulldata-common-service</module>
        <module>pulldata-notifyservice</module>
        <!--&lt;!&ndash;<module>pulldata-pullservice</module>&ndash;&gt;-->
        <module>pulldata-dataproviders</module>
        <module>pulldata-webservice</module>
        <module>pulldata-mqservice</module>
        <module>hbxj-dataproviders</module>
    </modules>

一个父模块下有7个子模块,如果父模块的version从1.1.0-SNAPSHOT更新到了1.1.1-SNAPSHOT,每一个子模块都需要一个个更新,其实说这么多就是为了引出maven的版本管理插件 Versions,

verisons提供了很多好用的功能,我们看下怎么解决刚才说的问题:

1,先安装,很简单,在父pom文件中加入如下代码:

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.7</version>
            </plugin>
        </plugins>
    </build>

2. 比如上面这个问题,我们可以直接运行一条maven指令:

mvn -N versions:update-child-modules  //更新所有的子模块继承的父模块版本号

就可以把所有继承的子模块更新为和父模块一致了。

3.还有很多好用的功能,

 3.1我们开发的版本一般用SNAPSHOT版本,线上版本用RELEASE版本,一般SNAPSHOT 没有自定义或手动deploy的话,deploy的频率是一天一次。

 为了防止你项目中依赖的SNAPSHOT版本的代码因为团队其他同事的deploy操作而变得不可用,可以先用

mvn versions:lock-snapshots 

锁住当前项目中的snapshot依赖包,开发完成之后再用

mvn versions:unlock-snapshots

解锁。

3.2 下面这个命令很有用,可以设置整个项目的版本号,在你需要设置新版本号,可以全局更新项目版本号。一般开发环境就设置成SNAPHSHOT版本,测试测完之后没问题设置成Release版。

mvn versions:set -DnewVersion=1.0.1-SNAPSHOT //更新整个项目版本

3.3 其他命令参考文档  

versions:set  
versions:lock-snapshots
versions:resolve-ranges
versions:unlock-snapshots
versions:update-child-modules
versions:update-parent
versions:update-properties
versions:set-property
versions:use-latest-releases
versions:use-latest-snapshots
versions:use-latest-versions
versions:use-next-releases
versions:use-next-snapshots
versions:use-next-versions
versions:use-releases

我一般主要用到的几个还是上面提到的。

另外附一些我常用mvn指令

mvn clean package -pl  要编译module目录 -am -Pdev  -DskipTests // -pl 只编译指定module 节省时间  -am 指定module依赖的模块也编译  

mvn clean install //安装jar包到本地仓库

mvn deploy  //deploy jar包到远程仓库

 

参考 https://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html

posted @ 2019-03-26 23:45  安琪拉的博客(公众号)  阅读(5325)  评论(0编辑  收藏  举报