一个Maven工程中一般会有很多模块组成,为了构建的方便通常想一次构建多个模块,Maven聚合这一特性就是为该需求服务的。 假设我们有account-email和account-persist两个模块。为了使用一条命令就能构建这两个模块,我门创建额外的account-aggregator的模块,然后通过该模块构建整个项目的的所有模块,account-aggregator模块本身作为Maven项目,它必须要有自己的POM文件,同时作为一个聚合项目,其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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Aggregator</name> <modules> <module>account-email</module> <module>account-persist</module> <modules> </project>
第一个特殊的地方为packaging,其值为pom,查看其他模块,它们都没有声明packaging,即使用了默认的jar。对于聚合模块来说,其打包方式packaging的值必须为pom,否则无法构建。
为了方便用户构建项目,通常将聚合模块放在项目目录的最顶层,其他模块则作为聚合模块的子目录存在。
关于目录结构还要注意一点,聚合模块与其他模块的目录结构并非一定是要父子关系,也可以是平行目录的结构,这时相应的module路径也要做相应的更改,如下:
<?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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Aggregator</name> <modules> <module>../account-email</module> <module>../account-persist</module> <modules> </project>
时间: 2024-10-15 18:27:19