Maven的聚合和继承
Maven的聚合
Maven的聚合也叫多模块,需要新建一个Maven项目用来聚合多个模块
聚合模块的POM
<groupId>com.huyp.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
注意:不再是使用默认的jar,而是pom,Maven会首先解析聚合模块的POM、分析要构建的的模块,并计算处一个反应堆构建顺序,然后根据这个顺序依次构建各个模块。反应堆是所有模块组成的一个构建结构。
Maven的继承
对于多模块中很多相同的配置,可以创建POM的父子结构,然后在父POM中声明一些配置供子POM继承,以实现”一处声明,多处使用”的目的
父模块POM
<groupId>com.huyp.account</groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
注意:不再是使用默认的jar,而是pom
子模块POM
<parent>
<groupId>com.huyp.account</groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0</version>
<relativePath>../account-parent/pom.xml</relativePath>
</parent>
<artifactId>account-email</artifactId>
注意:子模块从父模块继承了和节点
依赖的继承
因为不是所有模块的依赖都一样,所以简单的全盘继承存在问题,Maven提供了dependencyManagement元素,dependencyManagement元素下的依赖声明并不会实际的引入,不过它能够约束dependencies下依赖的使用。
父模块POM
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
<dependencyManagement>
<denpendencies>
<denpendencie>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</denpendencie>
</denpendencies>
</dependencyManagement>
注意:这里声明的依赖既不会给父模块引入依赖,也不会给子模块引入依赖,但是这个配置是可以被继承的
子模块POM
<denpendencies>
<denpendencie>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</denpendencie>
</denpendencies>
注意:子模块只会引入自己定义的依赖,但是继承于父节点,可以用来解决模块间依赖版本冲突的问题
插件的继承
跟依赖的继承一样,Maven也提供了pluginManagement用来处理插件的继承
父模块POM
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
子模块POM
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
</plugins>
</build>
反应堆
在一个多模块的Maven项目中,反应堆(Reactor)是指所有模块组成的一个构建结构,Maven根据模块间的继承和依赖关系自动计算处合理的模块构建顺序。