父工程
父工程用于指定子工程都包含的依赖,首先需要指明maven打包方式为pom:<packaging>pom</packaging>
,子工程中使用<parent></parent>
指明父工程是什么。
注意:为了方便修改模块版本,通常不指定子模块的版本,这样就直接继承了父工程的版本。
父:
<groupId>co.yixiang</groupId>
<artifactId>yshop</artifactId>
<packaging>pom</packaging>
<version>3.0</version>
子:
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>3.0</version>
</parent>
聚合工程
聚合工程:多个子模块可以独立运行,但是想要一键全部打包运行,需要建立聚合工程。
聚合工程是没有源码的工程,通常是子模块的父工程。使用<modules></modules>
指明包含的子模块即可。
聚合工程:
<modules>
<module>yshop-common</module>
<module>yshop-logging</module>
<module>yshop-admin</module>
<module>yshop-tools</module>
<module>yshop-generator</module>
<module>yshop-weixin</module>
<module>yshop-shop</module>
<module>yshop-mproot</module>
</modules>
子模块间版本依赖问题
如common依赖shop,mproot模块,那么common的pom会这么写:
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-shop</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-mproot</artifactId>
<version>3.0</version>
</dependency>
然后你在更新项目后,想把项目号变成4.0。你在父工程(聚合工程)里改了版本号为4.0
,也改了parent的版本,但是子模块依赖这里没改,就会导致不存在3.0的子模块(因为子模块继承父模块版本)。
一个解决方法是:子模块里原来所有3.0
的地方都用properties
标签代替:
<properties>
<project.version>3.0</project.version>
</properties>
每个子模块都这么写,然后父模块改为4.0时,更新每个子模块的properties
的project.version
为4.0
:
<properties>
<project.version>4.0</project.version>
</properties>
这样可以保证版本不出错。所有父模块、子模块、子模块相互依赖版本都是4.0
。但是如果子模块多了,那改起来也麻烦。
refer: https://blog.csdn.net/onupway/article/details/86512836
插件解决依赖
另外一个方法,使用idea的maven project version
插件,可以一键更新某个模块的版本,同步更新使用到的地方,很方便。使用时直接更新父模块的版本即可。
这种情况不需要写properties
和project.version
,子模块依赖直接写死3.0,利用插件会一键改变版本:
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-shop</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-mproot</artifactId>
<version>3.0</version>
</dependency>