zoukankan      html  css  js  c++  java
  • [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

    欢迎关注Java流水账公众号
  • 相关阅读:
    .net SMTP发送Email 更新(可带附件)
    Ext JS4百强应用: 做可编辑的,可checked的treegrid--第11强
    使你更有思想的20本书
    Sencha Architect 2 的使用
    Test SRM Level One: TemperatureScales
    Test SRM Level Two: CountExpressions, Brute Force
    JPDA 利用Eclipse和Tomcat进行远程调试 --转
    非对称加密算法RSA--转
    java/php/c#版rsa签名以及java验签实现--转
    JAVA/PHP/C#版RSA验签--转
  • 原文地址:https://www.cnblogs.com/guofu-angela/p/10604763.html
Copyright © 2011-2022 走看看