一、Maven的聚合
每个项目都会有多个模块,每个模块单独是一个Jar包,最后继承的时候,每个jar都要各自打包才能使用,非常繁琐。所以,Maven提出了一个聚合的概念,即可以同时打包多个项目。如何操作呢?
1)简单来做,在所有项目的同级目录下,新建一个pom.xml文件,修改pom.xml文件,添加<module>..</module>属性,执行mvn clean package指令即可。
<!-- 导入了三个模块,把这三个模块聚合在一起了 -->
<modules>
<module>user-core</module> --根目录
<module>user-log</module>
<module>user-service</module>
</modules>
2)在MyEclipse里面怎么操作呢?
1、新建一个Maven项目,勾选Create a simple project
2、Packaging,选择pom类型
3、修改pom.xml文件,添加<module>..</module>节点
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ly.user</groupId>
<artifactId>user-aggregation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 导入了三个模块,把这三个模块聚合在一起了 -->
<modules>
<module>../user-core</module>
<module>../user-log</module>
<module>../user-service</module>
</modules>
</project>
4、执行mvn clean package指令 ,即可发现已经同时打包了2个项目(由于user-core有点问题,没有参与此次打包)。
二、Maven的继承
继承的绝对路径是pom文件;聚合是模块的位置。
因为每个子模块的pom.xml之间存在大量重复的属性,所以提出继承的概念,即创建一个父类的pom.xml文件。
1)在MyEclipse里面怎么操作呢?
1、新建一个Maven项目(user-parent),勾选Create a simple project
2、Packaging,选择pom类型
3、修改pom.xml文件,将每个子模块相同的部分提取到父类pom.xml中
比如属性:<url>http://www.example.com</url> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>等
同时删除子模块中相同的属性
4、在每个子模块的pom.xml中添加parent节点
5、依赖的继承 ,添加dependencyManagement节点(依赖管理)
- 父类pom.xml管理依赖,包括依赖的版本及作用域;子类中可删除版本及作用域节点
三、Maven的聚合与继承统一放到pom.xml文件中
代码参考:
user-parent的Pom.xml文件:
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 导入了三个模块,把这三个模块聚合在一起了 -->
<modules>
<!-- <module>../user-core</module>-->
<module>../user-log</module>
<module>../user-service</module>
</modules>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.10.Final</version>
</dependency>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.easymock/easymock -->
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>4.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>user-log</artifactId>
<version>${project.version}</version>
<!-- 依赖排除 -->
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
</project>
user-core的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath> <!-- 相对路径 -->
</parent>
<artifactId>user-core</artifactId>
<name>user-core</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc7</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>dbunit</groupId>
<artifactId>dbunit</artifactId>
</dependency>
</dependencies>
</project>
user-log的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath> <!-- 相对路径 -->
</parent>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-log</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
</dependencies>
</project>
user-service的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath> <!-- 相对路径 -->
</parent>
<groupId>com.ly.firstMaven</groupId>
<artifactId>user-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-service</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>user-log</artifactId>
</dependency>
</dependencies>
</project>