Maven 聚合
<project
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifact>account-aggregator</artifact>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Account Aggregator</name>
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
</project>
该pom
文件作为其他pom
的容器运行,在pom
文件的modules
标签中引入我们想要聚合的各个模块。这样就整合了多个模块。
需要注意的是:
-
<packageing>
标签在聚合情况下的打包方式必须为pom
Maven 继承
<project
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:shemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Account Parent</name>
</project>
由于父模块只是为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java之类的文件夹了。需要注意打包类型也为pom
即可。
<project
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:shemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.juvenxu.mvnbook.account<groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../account-parent/pom.xml</relativePath>
</parent
<artifactId>account-email</artifactId>
<name>Account Email</name>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
....
</plugins>
</build>
</project>
- 和
Java
中的继承一样需要指定继承的配置文件地址<parent>
标签
子pom配置:
<parent>
<groupId>父pom所在项目的groupId</groupId>
<artifactId>父pom所在项目的artifactId</artifactId>
<version>父pom所在项目的版本号</version>
</parent>
dependencyManagement
在
Maven
中dependencyManagement
的作用其实相当于一个对所依赖jar
包进行版本管理的管理器。pom.xml
文件中,jar
的版本判断的两种途径
-
如果
dependencies
里的dependency
自己没有声明version
元素,那么maven
就会倒dependencyManagement
里面去找有没有对该artifactId
和groupId
进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency
声明一个version
- 所以在继承中父类的
pom
文件要使用dependencyManagement
来承载公共依赖。为底层子pom
提供公用的依赖verison
。就不需要每个子类频繁声明了。有时候还可能声明的版本不一致
- 所以在继承中父类的
如果
dependencies
中的dependency
声明了version
,那么无论dependencyManagement
中有无对该jar
的version
声明,都以dependency
里的version
为准。
如下
pom.xml
//只是对版本进行管理,不会实际引入jar
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.7</version>
</dependency>
</dependencies>
</dependencyManagement>
//会实际下载jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>