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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[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包到远程仓库。

相关文档
最新文档