一、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>
