父工程

父工程用于指定子工程都包含的依赖,首先需要指明maven打包方式为pom:<packaging>pom</packaging>,子工程中使用<parent></parent>指明父工程是什么。
注意:为了方便修改模块版本,通常不指定子模块的版本,这样就直接继承了父工程的版本。

  1. 父:
  2. <groupId>co.yixiang</groupId>
  3. <artifactId>yshop</artifactId>
  4. <packaging>pom</packaging>
  5. <version>3.0</version>
  6. 子:
  7. <parent>
  8. <artifactId>yshop</artifactId>
  9. <groupId>co.yixiang</groupId>
  10. <version>3.0</version>
  11. </parent>

聚合工程

聚合工程:多个子模块可以独立运行,但是想要一键全部打包运行,需要建立聚合工程。
聚合工程是没有源码的工程,通常是子模块的父工程。使用<modules></modules>指明包含的子模块即可。

  1. 聚合工程:
  2. <modules>
  3. <module>yshop-common</module>
  4. <module>yshop-logging</module>
  5. <module>yshop-admin</module>
  6. <module>yshop-tools</module>
  7. <module>yshop-generator</module>
  8. <module>yshop-weixin</module>
  9. <module>yshop-shop</module>
  10. <module>yshop-mproot</module>
  11. </modules>

子模块间版本依赖问题

如common依赖shop,mproot模块,那么common的pom会这么写:

  1. <dependency>
  2. <groupId>co.yixiang</groupId>
  3. <artifactId>yshop-shop</artifactId>
  4. <version>3.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>co.yixiang</groupId>
  8. <artifactId>yshop-mproot</artifactId>
  9. <version>3.0</version>
  10. </dependency>

然后你在更新项目后,想把项目号变成4.0。你在父工程(聚合工程)里改了版本号为4.0,也改了parent的版本,但是子模块依赖这里没改,就会导致不存在3.0的子模块(因为子模块继承父模块版本)。
一个解决方法是:子模块里原来所有3.0的地方都用properties标签代替:

  1. <properties>
  2. <project.version>3.0</project.version>
  3. </properties>

每个子模块都这么写,然后父模块改为4.0时,更新每个子模块的propertiesproject.version4.0

  1. <properties>
  2. <project.version>4.0</project.version>
  3. </properties>

这样可以保证版本不出错。所有父模块、子模块、子模块相互依赖版本都是4.0。但是如果子模块多了,那改起来也麻烦。

refer: https://blog.csdn.net/onupway/article/details/86512836image.png


插件解决依赖

另外一个方法,使用idea的maven project version插件,可以一键更新某个模块的版本,同步更新使用到的地方,很方便。使用时直接更新父模块的版本即可。
image.png
这种情况不需要写propertiesproject.version,子模块依赖直接写死3.0,利用插件会一键改变版本:

  1. <dependency>
  2. <groupId>co.yixiang</groupId>
  3. <artifactId>yshop-shop</artifactId>
  4. <version>3.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>co.yixiang</groupId>
  8. <artifactId>yshop-mproot</artifactId>
  9. <version>3.0</version>
  10. </dependency>