`

Maven实战(二)—— 继承和聚合

 
阅读更多
继承:

1. 被继承项目与继承项目是父子目录关系

现在假设我们有一个项目projectA,有另一个项目projectB,而且projectB是跟projectA的pom.xml文件处于同一个目录下,这个时候projectA和projectB的目录结构如下:

------projectA

       ------projectB

              -----pom.xml

       ------pom.xml

这时候如果projectB需要继承自projectA的话我们可以这样定义projectB的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/maven-v4_0_0.xsd">

  <parent>

    <groupId>com.tiantian.mavenTest</groupId>

    <artifactId>projectA</artifactId>

    <version>1.0-SNAPSHOT</version>

  </parent>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tiantian.mavenTest</groupId>

  <artifactId>projectB</artifactId>

  <packaging>jar</packaging>

  <version>1.0-SNAPSHOT</version>

 

</project>

 

2. 被继承项目与继承项目的目录结构不是父子关系

当被继承项目与继承项目的目录结构不是父子关系的时候,我们再利用上面的配置是不能实现Maven项目的继承关系的,这个时候我们就需要在子项目的pom.xml文件定义中的parent元素下再加上一个relativePath元素的定义,用以描述父项目的pom.xml文件相对于子项目的pom.xml文件的位置。

       假设我们现在还是有上面两个项目,projectA和projectB,projectB还是继承自projectA,但是现在projectB不在projectA的子目录中,而是与projectA处于同一目录中。这个时候projectA和projectB的目录结构如下:

       ------projectA

              ------pom.xml

       ------projectB

              ------pom.xml

       这个时候我们可以看出projectA的pom.xml相对于projectB的pom.xml的位置是“../projectA/pom.xml”,所以这个时候projectB的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/maven-v4_0_0.xsd">

  <parent>

    <groupId>com.tiantian.mavenTest</groupId>

    <artifactId>projectA</artifactId>

    <version>1.0-SNAPSHOT</version>

       <relativePath>../projectA/pom.xml</relativePath>

  </parent>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tiantian.mavenTest</groupId>

  <artifactId>projectB</artifactId>

  <packaging>jar</packaging>

  <version>1.0-SNAPSHOT</version>

</project>

 

 

聚合:

如果projectA聚合到projectB,那么我们就可以说projectA是projectB的子模块,projectB是被聚合项目,也可以类似于继承那样称为父项目。对于聚合而言,这个主体应该是被聚合的项目。所以,我们需要在被聚合的项目中定义它的子模块,而不是像继承那样在子项目中定义父项目。具体做法是:

Ø  修改被聚合项目的pom.xml中的packaging元素的值为pom

Ø  在被聚合项目的pom.xml中的modules元素下指定它的子模块项目

对于聚合而言,当我们在被聚合的项目上使用Maven命令时,实际上这些命令都会在它的子模块项目上使用。这就是Maven中聚合的一个非常重要的作用。

1. 被聚合项目和子模块项目在目录结构上是父子关系

现在假设我们需要把projectB聚合到projectA中。projectA和projectB的目录结构如下所示:

------projectA

       ------projectB

              -----pom.xml

       ------pom.xml

这个时候projectA的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.tiantian.mavenTest</groupId>

  <artifactId>projectA</artifactId>

  <version>1.0-SNAPSHOT</version>

  <packaging>pom</packaging>

  <modules>

       <module>projectB</module>

  </modules>

 

</project>

我们可以看到被聚合的项目的packaging类型应该为pom,而且一个项目可以有多个子模块项目。对于聚合这种情况,我们使用子模块项目的artifactId来作为module的值,表示子模块项目相对于被聚合项目的地址。

2. 被聚合项目与子模块项目在目录结构上不是父子关系

projectB聚合到projectA,但是projectAprojectB的目录结构不再是父子关系,而是如下所示的这种关系:

------projectA

       ------pom.xml

------projectB

       ------pom.xml

这个时候projectApom.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.tiantian.mavenTest</groupId>

  <artifactId>projectA</artifactId>

  <version>1.0-SNAPSHOT</version>

  <packaging>pom</packaging>

  <modules>

       <module>../projectB</module>

  </modules>

 

</project>

注意看module的值是“../projectB”,我们知道“..”是代表当前目录的上层目录,所以它表示子模块projectB是被聚合项目projectApom.xml文件所在目录(即projectA)的上层目录下面的子目录,即与projectA处于同一目录层次。注意,这里的projectB对应的是projectB这个项目的目录名称,而不是它的artifactId

分享到:
评论

相关推荐

    maven依赖+继承+聚合

    本示例将深入探讨Maven中的“依赖”、“继承”和“聚合”这三个核心概念,帮助开发者更好地理解和应用Maven。 首先,我们来讨论"Maven依赖"。在Java开发中,一个项目往往需要引用其他库或者框架来完成特定功能。...

    maven总结笔记-继承和聚合

    maven总结笔记-继承和聚合

    Maven实战——入门篇

    ### Maven实战——入门篇 #### Maven简介与概念 Maven是一种强大的、跨平台的项目管理工具,主要用于基于Java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目还是大型的企业级应用,Maven都能...

    Maven 实战(中文pdf)

    对于初学者,书中提供的实例和实战经验可以帮助快速上手;对于经验丰富的开发者,也能从中找到优化项目构建流程的新思路。 总的来说,《Maven实战》中文版为Java开发者提供了一条通往高效开发的道路,无论你是刚...

    maven继承与聚合代码

    本篇文章将深入探讨Maven的两个重要特性:继承(Inheritance)和聚合(Aggregation),并结合提供的资源《一头扎进Maven3》第五讲源码及文档进行详细解释。 **一、Maven继承** Maven的继承机制允许我们在多个项目...

    maven聚合与继承配置

    在Java开发中,Maven是一个强大...总结,Maven的聚合和继承是两种重要的项目组织方式,它们使得大型项目管理变得简单而高效。在实际开发中,合理利用这两个特性,可以有效地提高团队协作的效率,降低项目维护的复杂度。

    Maven 实战(361)_12804356.pdf

    Maven 实战(361)_12804356.pdf

    Maven实战 Maven实战Maven实战

    5. **聚合与继承**:聚合允许在一个顶级POM中管理多个子项目,而继承则可以让一个POM继承另一个POM的配置。 #### Maven高级特性 1. **使用Nexus建立私服**:Nexus是一个开源的仓库管理系统,可以帮助企业搭建私有...

    maven 实战 所有源代码

    本篇文章将深入探讨"Maven实战"中涉及的所有源代码,帮助开发者更深入地理解和运用Maven。 ### 一、Maven的项目结构 在Maven中,项目的标准目录结构(也称为"Maven目录布局")至关重要。源代码文件通常分布在以下...

    Maven 实战.pdf-完整版

    接着,书中的内容逐步深入,详细讲解了Maven的核心概念,例如坐标和依赖管理、仓库管理、生命周期和插件的使用、聚合与继承等,这些都是使用Maven时必须掌握的基础知识。 本书还介绍了Maven在实际开发中的高级应用...

    Maven 实战源码

    《Maven实战源码》是一本专为Java开发者设计的指南,旨在帮助初学者和有经验的开发者深入理解和掌握Maven这一强大的项目管理和构建工具。Maven不仅简化了项目的构建过程,还通过依赖管理和插件机制,使得软件开发...

    Maven实战.pdf

    Maven实战 好书 学习参考.pdf

    Maven 实战(书签版),十分清晰强烈推荐

    Maven 实战(书签版) 影印版,影印规整,十分清晰,强烈推荐!

    maven聚合和继承

    在Maven中,"聚合"和"继承"是两个重要的特性,它们有助于管理和组织大型的多模块项目。 **一、Maven聚合** Maven聚合(Aggregation)是用来管理多个相关项目的方式,这些项目可能共享一部分代码或者有共同的构建...

Global site tag (gtag.js) - Google Analytics