当前位置: 首页 > article >正文

Maven(Ⅲ)继承和聚合

Maven继承

概念

Maven继承主要用于管理项目的公共配置,如依赖、插件等。通过继承,子项目可以复用父项目的配置,减少重复代码,提高项目的可维护性。一个父项目可以有多个子项目,子项目可以继承父项目的 groupIdversion、依赖、插件配置等信息。

示例代码
父项目 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> 标签指定父项目的 groupIdartifactIdversion,从而继承父项目的配置。

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 聚合主要用于提高构建效率,一次性构建多个项目。在实际项目中,两者可以结合使用,以更好地管理项目结构和配置。


http://www.kler.cn/a/533248.html

相关文章:

  • Verilog语言学习总结
  • 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  • CSS Display属性完全指南
  • 如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?
  • opencv图像处理框架
  • FPGA学习篇——开篇之作
  • 【Origin笔记-2】降水量变化趋势单位理解
  • Flink (十四) :Table API SQL (二) 流式概念
  • 使用DeepSeek的技巧笔记
  • 【怎么用系列】短视频戒除—2—(移动端)抖音等短视频定时关闭方法
  • 视觉控件怎么去做以及过程,怎么让系统自动到保存电脑?
  • 配置@别名路径,把@/ 解析为 src/
  • 响应式编程_03响应式编程在Netflix Hystrix 、Spring Cloud Gateway、Spring WebFlux中的应用
  • java进阶文章链接
  • Page Assist - 本地Deepseek模型 Web UI 的安装和使用
  • SpringBoot开发(四)SpringBoot配置文件
  • 【数据可视化-14】Boss招聘数据分析岗位的可视化分析
  • C++11详解(二) -- 引用折叠和完美转发
  • 使用C++构建一个优先级队列
  • 代理模式的作用
  • 从 DeepSeek R1 中提取数学推理数据,使用 CAMEL
  • 华为手机nova9,鸿蒙系统版本4.2.0.159,智慧助手.今天版本是14.x,如何卸载智慧助手.今天?
  • Python进行模型优化与调参
  • SGlang 专为大模型设计的高效服务框架
  • DRGDIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)
  • AI透明化与全球政治格局的发展:如何避免AI被人为操控