Maven(Ⅲ)继承和聚合
Maven继承
概念
Maven继承主要用于管理项目的公共配置,如依赖、插件等。通过继承,子项目可以复用父项目的配置,减少重复代码,提高项目的可维护性。一个父项目可以有多个子项目,子项目可以继承父项目的 groupId
、version
、依赖、插件配置等信息。
示例代码
父项目 parent-project
首先,创建一个 Maven 项目作为父项目,其 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 公共依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 公共插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意,父项目的 packaging
标签值为 pom
,表示这是一个项目对象模型,不生成具体的构件。
子项目 child-project
创建一个子项目,其 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承父项目 -->
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>child-project</artifactId>
<!-- 可以添加额外的依赖 -->
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
子项目通过 <parent>
标签指定父项目的 groupId
、artifactId
和 version
,从而继承父项目的配置。
Maven 聚合
概念
Maven 聚合用于将多个相关的项目作为一个整体进行构建。通过聚合,开发者可以一次性构建多个项目,提高开发效率。聚合项目的 pom.xml
会列出所有要聚合的子项目,Maven 会按照指定的顺序依次构建这些子项目。
示例代码
聚合项目 aggregation-project
创建一个 Maven 项目作为聚合项目,其 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>aggregation-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 列出要聚合的子项目 -->
<modules>
<module>module1</module>
<module>module2</module>
</modules>
</project>
注意,聚合项目的 packaging
标签值也为 pom
。<modules>
标签列出了要聚合的子项目,子项目的名称是相对于聚合项目的目录名。
子项目 module1
创建子项目 module1
,其 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>module1</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
子项目 module2
创建子项目 module2
,其 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>module2</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
总结
Maven 继承主要用于代码复用,减少重复配置;Maven 聚合主要用于提高构建效率,一次性构建多个项目。在实际项目中,两者可以结合使用,以更好地管理项目结构和配置。