博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven创建多模块项目(包括依赖版本号的统一更新)
阅读量:6348 次
发布时间:2019-06-22

本文共 6427 字,大约阅读时间需要 21 分钟。

0、多项目工程的文件夹及依赖关系

bus-core-api为公共项目,app-web-ui依赖bus-core-api,app-desktop-ui依赖bus-core-api

1、创建一个父Maven工程

mvn archetype:generate -DgroupId=com.jsoft.test -DartifactId=testproject -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DinteractiveMode=false -DarchetypeVersion=RELEASE

注意:此项目为pom类型的工程,创建好之后只有一个pom.xml文件,<packaging>类型为pom。

创建好后的pom.xml文件内容如下:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
pom
testproject

2、创建三个子Maven工程

注意:此时创建的工程的目录是进去父Maven工程的目录进行创建

①创建bus-core-api项目

mvn archetype:generate -DgroupId=com.jsoft.test -DartifactId=bus-core-api -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeVersion=RELEASE

②创建app-desktop-ui项目

mvn archetype:generate -DgroupId=com.jsoft.test -DartifactId=app-desktop-ui -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeVersion=RELEASE

③创建app-web-ui项目

mvn archetype:generate -DgroupId=com.jsoft.test -DartifactId=app-web-ui -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeVersion=RELEASE

此时创建好项目之后,父Maven工程pom.xml也会跟着改变,自动加入<Module>节点,如下所示:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
pom
testproject
bus-core-api
app-desktop-ui
app-web-ui

而通过进入到父Maven工程的目录创建的子Maven工程,pom.xml也会做相应的变化,增加了<parent>节点,内容如下:

bus-core-api:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
com.jsoft.test
bus-core-api
1.0-SNAPSHOT
bus-core-api
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test

app-desktop-ui:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
com.jsoft.test
app-desktop-ui
1.0-SNAPSHOT
app-desktop-ui
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test

app-web-ui:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
com.jsoft.test
app-web-ui
1.0-SNAPSHOT
war
app-web-ui Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
app-web-ui

而此时项目还没有完工,因为bus-core-api为公共项目,app-web-ui依赖bus-core-api,app-desktop-ui依赖bus-core-api,所以必须在app-web-ui和app-desktop-ui增加对bus-core-api的依赖引用。修改后的pom.xml如下:

app-desktop-ui:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
com.jsoft.test
app-desktop-ui
1.0-SNAPSHOT
app-desktop-ui
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
  
com.jsoft.test
  
bus-core-api
  
1.0-SNAPSHOT

app-web-ui:

4.0.0
com.jsoft.test
testproject
1.0-SNAPSHOT
com.jsoft.test
app-web-ui
1.0-SNAPSHOT
war
app-web-ui Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
  
com.jsoft.test
  
bus-core-api
  
1.0-SNAPSHOT
app-web-ui

可以看出,每个项目上都需要增加对bus-core-api的依赖,而且这个依赖需要写上<version>节点,上面就已经写上了1.0-SNAPSHOT。

接下来测试依赖是否成功,先进入父Maven项目的目录,然后进行打包mvn package

打包完成后,打开app-web-ui.war包,查看WEB-INF\lib\目录下是否有bus-core-api-1.0-SNAPSHOT.jar的引用。

如上所示已经成功引用。

至此,使用Maven新建多模块项目的过程就已经完成了。

 

参考:

 

测试工程:

 

但是,可能会有一个疑问,比如说我bus-core-api这个项目在下面两个项目上的依赖,当bus-core-api更新版本号时,难道app-web-ui和app-desktop-ui项目上的pom.xml文件的<version>也要做相应的更改吗?完全要自己手动去修改吗?

经过研究可以通过下面方法实现:

1、在父Maven项目定义一个属性<properties>叫做<projectVersion>,然后每个项目的<version>节点都引用这个变量${projectVersion},包括依赖上的<version>都使用这个。那么当更新版本时手动修改一处地方即可。虽然解决了大量工作,但是小量的修改还是可以接受的。

2、也许能行,通过maven-release-plugin插件实现,参考:

3、终极解决方法,使用versions-maven-plugin插件,官网:

当使用此插件在父Maven项目testproject时,运行如下命令将更新全部项目的版本号,包括子项目之间的依赖也都同步更新:

mvn versions:set -DnewVersion=2.0-SNAPSHOT

当进入到子Maven项目bus-core-api时,运行如下命令将更新全部项目对bus-core-api项目引用的版本号:

mvn versions:set -DnewVersion=2.1-SNAPSHOT

当更改版本号时有问题,可以通过以下命令进行版本号回滚:

mvn versions:revert

如果一切都没有问题,那就直接提交版本号:

mvn versions:commit

通过这个插件就可以对特定项目更新版本号时,其它与它有关联的项目都可以一并更新。

其它使用方法,参考:

还有使用此插件需要注意的,比如自己手动修改了某个文件的版本号,那么这样通过这个插件去更新时是更新不到的,因为匹配不上手动修改的版本号。如果要使其生效,就必须更改成统一的版本号。

转载地址:http://pfvla.baihongyu.com/

你可能感兴趣的文章
第0次作业
查看>>
Ubuntu里设置python默认版本为python3(转载)
查看>>
快排+折半查找
查看>>
c# GC 新典型
查看>>
ssh bash 通配符
查看>>
seajs在jquery多个版本下引用jquery的插件的方案
查看>>
关于网络上java,php和.net的“口角之争“的一点想法 !
查看>>
python 第二周(第十三天) 我的python成长记 一个月搞定python数据挖掘!(21) -正则表达式re...
查看>>
[POI2011]SEJ-Strongbox
查看>>
20文件
查看>>
Android开发Intent应用概述
查看>>
【Go】并发编程
查看>>
VMware虚拟化NSX-Manager命令行更改admin用户密码
查看>>
悦纳自己
查看>>
python字符串函数
查看>>
ORM框架Hibernate (四)MyEclipse Hibernate Tool 逆向生成实体类
查看>>
js中substr与substring的区别
查看>>
去掉iphone连接电脑时会出现的弹出窗口
查看>>
【python】-- web开发之HTML
查看>>
vs2015 去除 git 源代码 绑定
查看>>