聚合和继承:
聚合:
Maven会首先解析聚合模块的POM,分析要构建的模块,并计算出一个反应堆构建顺序,然后根据这个顺序依次构建各个模块。
继承:
就是抽象各个模块中重复的配置。在父pom中声明一些配置提供给子pom中使用。以实现移除声明多处使用的目的。
作为父模块中的POM,其打包类型必须是pom,由于父模块只是为了消除重复的配置,它本身不包括pom之外的项目文件也就不需要src/main/java之类的文件了。
例如:
<parent>
<groupId>com.alibaba</groupId>
<artifactId>alifi</artifactId>
<version>1-RC1</version>
</parent>
<groupId>com.alifi.aliloan.myth</groupId> <!-- 定义了项目属于哪个组,这个组往往和项目所在的组织和公司存在关联,一般是域名反向一一对应 -->
<artifactId>myth.parent</artifactId> <!-- 定义了当前maven项目在组中的唯一的ID,你可能会为不同的子项目(模块)分配不同的artifactId -->
<version>3.4.0-SNAPSHOT</version> <!-- version 表示当前项目的版本,-SNAPSHOT 译为快照 -->
<packaging>pom</packaging> <!-- 打包类型,如果没有指定默认为jar -->
<name>Myth Parent POM</name> <!-- name声明了一个对于用户更为有好的项目名称,方便信息交流 -->
<description>淘宝纯信用贷款</description>
<modules>
<module>myth.biz.creditapply</module>
<module>myth.bundle.war</module>
</modules>
<groupId>com.alibaba</groupId>
<artifactId>alifi</artifactId>
<version>1-RC1</version>
</parent>
<groupId>com.alifi.aliloan.myth</groupId> <!-- 定义了项目属于哪个组,这个组往往和项目所在的组织和公司存在关联,一般是域名反向一一对应 -->
<artifactId>myth.parent</artifactId> <!-- 定义了当前maven项目在组中的唯一的ID,你可能会为不同的子项目(模块)分配不同的artifactId -->
<version>3.4.0-SNAPSHOT</version> <!-- version 表示当前项目的版本,-SNAPSHOT 译为快照 -->
<packaging>pom</packaging> <!-- 打包类型,如果没有指定默认为jar -->
<name>Myth Parent POM</name> <!-- name声明了一个对于用户更为有好的项目名称,方便信息交流 -->
<description>淘宝纯信用贷款</description>
<modules>
<module>myth.biz.creditapply</module>
<module>myth.bundle.war</module>
</modules>
子模块:
<parent>
<groupId>com.alifi.aliloan.myth</groupId>
<artifactId>myth.parent</artifactId>
<version>3.5.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>myth.biz</artifactId>
<version>${project.parent.version}</version>
<name>myth.biz</name>
<packaging>jar</packaging>
<groupId>com.alifi.aliloan.myth</groupId>
<artifactId>myth.parent</artifactId>
<version>3.5.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>myth.biz</artifactId>
<version>${project.parent.version}</version>
<name>myth.biz</name>
<packaging>jar</packaging>
dependencies下面所有的依赖会自动被子pom完全继承和覆盖。
dependencyManagement 只是给出该依赖的信息,子pom如果用的话,还需要在dependencies下声明,只是不用在写具体的version了。
依赖管理:
dependencyManagement 元素既能够让子模块继承到父模块的以来配置,又能保证子模块使用的灵活性。在dependencyManagement声明的依赖不会被引入实际的依赖,不过能够约束dependencies的使用。
好处:在父类里面约束依赖的版本,一份配置不会被到处引用。
插件管理:
<build>
<finalName>myth</finalName>
<finalName>myth</finalName>
<pluginManagement>
<plugins>
<!-- maven compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- maven compiler plugin -->
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${java.encoding}</encoding>
</configuration>
</plugin>
<!-- maven surefire plugin -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<argLine>-Xmx256m</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit4</artifactId>
<version>2.7</version>
</dependency>
</dependencies>
</plugin>
<plugins>
<!-- maven compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- maven compiler plugin -->
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${java.encoding}</encoding>
</configuration>
</plugin>
<!-- maven surefire plugin -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<argLine>-Xmx256m</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit4</artifactId>
<version>2.7</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
反应堆:
是指所有模块组成的一个构建结果,它包含了各个模块之间的继承与依赖关系,从而能够够自动计算出合理的模块构建顺序。
裁剪反应堆:
mvn deploy -pl common,service/loan/api -am -Denforcer.skip=true -Dmaven.test.skip=true
-pl 构建指定的模块模块之间用逗号分隔
-am 同时构建所列出的模块的依赖模块
-amd 同时构建依赖于所列模块的模块
-rf 从指定的模块开始构建反应堆