maven的多模块聚合
聚合是为了方便多模块的构建,只要构建一个聚合其他模块的项目,就可以完成多模块的构建了。
我们来看个例子,我这有一个公司模块(company-all)作为一个聚合模块,聚合技术部模块(technical-department)和财务部(financial-department)模块。
company-all的pom文件,作为聚合模块和父类模块 其packing的类型必须是pom。
<?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>
<groupId>com</groupId>
<artifactId>company-all</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>technical-department</module>
<module>financial-department</module>
</modules>
<packaging>pom</packaging>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<distributionManagement>
<site>
<id>website</id>
<url>scp://webhost.company.com/www/website</url>
</site>
</distributionManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- set thymeleaf version -->
<thymeleaf.version>3.0.10.RELEASE</thymeleaf.version>
<spring.version>4.3.10.RELEASE</spring.version>
<thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
<!--set java version-->
<junit-version>4.12</junit-version>
<log4j-version>2.5</log4j-version>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
其module的路径要符合实际路径相对与聚合模块的pom文件路径,如果2个子模块和聚合模块平级,就需要加…/之类的。
maven的继承
父模块可以把公共的依赖和打包的插件,抽离到父类这样可以进行统一的管理。
子模块添加标签
<parent>
<artifactId>company-all</artifactId>
<groupId>com</groupId>
<version>1.0-SNAPSHOT</version>
<!--<relativePath></relativePath>-->
</parent>
<modelVersion>4.0.0</modelVersion>
relativePath属性默认是…/pom会先从文件系统去找,找不到就会去本地仓库,远程仓库去找
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
定义在dependencyManagement的依赖不会实际的被子模块添加依赖,子模块需要显示的指定添加依赖,但不需要添加版本号,这样保证jar的版本号统一,又避免子模块引入一些不相关的jar包
打包测试