1、一个简单的Maven模块结构是这样的:
---- app-parent
|-- pom.xml (pom)
|
|-- app-util
| |-- pom.xml (jar)
|
|-- app-dao
| |-- pom.xml (jar)
|
|-- app-service
| |-- pom.xml (jar)
|
|-- app-web
|-- pom.xml (war)
这样做的好处是:
2、父子pom的详细配置
父Pom配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cainiao.test</groupId> <artifactId>parent</artifactId> <version>1.0</version> <packaging>pom</packaging> <modules> <module>project-1</module> <module>project-2</module> </modules> </project>
Maven的坐标GAV(groupId, artifactId, version)在这里进行配置,这些都是必须的。特殊的地方在于,这里的packaging为pom。所有带有子模块的项目的packaging都为pom。packaging如果不进行配置,它的默认值是jar,代表Maven会将项目打成一个jar包。在Maven build parent的时候,它会根据子模块的相互依赖关系整理一个build顺序,然后依次build。
父pom的作用是抽取各个子模块公用的依赖,控制其版本号,从而保持各个子模块依赖版本一致。
子模块pom配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.cainiao.test</groupId> <artifactId>parent</artifactId> <version>1.0</version> <relativePath>../pom.xml</relativePath> </parent>
<artifactId>project-1</artifactId>
....
</project>
它没有声明完整GAV(groupId, artifactId, version),这里我们只看到了artifactId。这个POM并没有错,groupId和version默认从父模块继承了。实际上子模块从父模块继承一切东西,包括依赖,插件配置等等。
参考文章:
https://blog.csdn.net/f45056231p/article/details/84942531
https://xinklabi.iteye.com/blog/2075345
原文:https://www.cnblogs.com/shuhe-nd/p/11130593.html