maven的聚合模块和pom继承使用

1.什么是maven的聚合模块?

聚合模块为项目目录的最顶层,其他模块作为聚合模块子目录而存在。目的是为一次构建多个项目模块。

1.1 项目结构

我自己化了一个关于项目的关系:

1.2 pom标签配置-module下载

maven-aggregate作为maven pom项目,需要定义pom.xml的 packaging 为 pom类型

我们还是参照 maven的依赖特性,冲突解决(五) 创建 maven-01 maven-02  maven-03工程,通过maven-aggregate pom工程 对这三个maven项目做一个聚合,配置如下:

Xml代码  下载

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-aggregate</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>pom</packaging>
  8. <!-- 子模块 指定项目pom的位置   ..代表上一级目录-->
  9. <modules>
  10. <module>../maven-01</module>
  11. <module>../maven-02</module>
  12. <module>..maven-03</module>
  13. </modules>
  14. </project>

对 maven-aggregate执行下mvn clean compile

Xml代码  下载

  1. [INFO] Scanning for projects...
  2. [WARNING]
  3. [WARNING] Some problems were encountered while building the effective model for com.sohu.train:maven-02:jar:1.0-SNAPSHORT
  4. [WARNING] ‘dependencies.dependency.exclusions.exclusion.groupId‘ for junit:junit:jar is missing. @ line 38, column 16
  5. [WARNING] ‘dependencies.dependency.exclusions.exclusion.artifactId‘ for junit:junit:jar is missing. @ line 38, column 16
  6. [WARNING]
  7. [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
  8. [WARNING]
  9. [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
  10. [WARNING]
  11. [INFO] ------------------------------------------------------------------------
  12. [INFO] Reactor Build Order:   //构建 maven 的反应堆,执行清理 编译的顺序
  13. [INFO]
  14. [INFO] maven-02
  15. [INFO] maven-01
  16. [INFO] maven-03
  17. [INFO] maven-aggregate
  18. [INFO]
  19. [INFO] ------------------------------------------------------------------------
  20. [INFO] Building maven-02 1.0-SNAPSHORT
  21. [INFO] ------------------------------------------------------------------------
  22. [INFO]
  23. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-02 ---
  24. [INFO] Deleting E:\train\test\maven-02\target
  25. [INFO]
  26. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-02 ---
  27. [INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
  28. [INFO] skip non existing resourceDirectory E:\train\test\maven-02\src\main\resources
  29. [INFO]
  30. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-02 ---
  31. [INFO] Changes detected - recompiling the module!
  32. [INFO] Compiling 1 source file to E:\train\test\maven-02\target\classes
  33. [INFO]
  34. [INFO] ------------------------------------------------------------------------
  35. [INFO] Building maven-01 1.0-SNAPSHOT
  36. [INFO] ------------------------------------------------------------------------
  37. [INFO]
  38. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-01 ---
  39. [INFO] Deleting E:\train\test\maven-01\target
  40. [INFO]
  41. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-01 ---
  42. [INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
  43. [INFO] Copying 1 resource
  44. [INFO]
  45. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-01 ---
  46. [INFO] Changes detected - recompiling the module!
  47. [INFO] Compiling 1 source file to E:\train\test\maven-01\target\classes
  48. [INFO]
  49. [INFO] ------------------------------------------------------------------------
  50. [INFO] Building maven-03 0.0.1-SNAPSHOT
  51. [INFO] ------------------------------------------------------------------------
  52. [INFO]
  53. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-03 ---
  54. [INFO] Deleting E:\train\test\maven-03\target
  55. [INFO]
  56. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-03 ---
  57. [INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
  58. [INFO] skip non existing resourceDirectory E:\train\test\maven-03\src\main\resources
  59. [INFO]
  60. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-03 ---
  61. [INFO] Changes detected - recompiling the module!
  62. [INFO] Compiling 1 source file to E:\train\test\maven-03\target\classes
  63. [INFO]
  64. [INFO] ------------------------------------------------------------------------
  65. [INFO] Building maven-aggregate 0.0.1-SNAPSHOT
  66. [INFO] ------------------------------------------------------------------------
  67. [INFO]
  68. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-aggregate ---
  69. [INFO] ------------------------------------------------------------------------
  70. [INFO] Reactor Summary:     // 可以看到 对3个maven项目 一起执行编译
  71. [INFO]
  72. [INFO] maven-02 ........................................... SUCCESS [  1.874 s]
  73. [INFO] maven-01 ........................................... SUCCESS [  0.108 s]
  74. [INFO] maven-03 ........................................... SUCCESS [  0.158 s]
  75. [INFO] maven-aggregate .................................... SUCCESS [  0.002 s]
  76. [INFO] ------------------------------------------------------------------------
  77. [INFO] BUILD SUCCESS
  78. [INFO] ------------------------------------------------------------------------
  79. [INFO] Total time: 2.263 s
  80. [INFO] Finished at: 2016-01-15T14:35:41+08:00
  81. [INFO] Final Memory: 14M/227M
  82. [INFO] ------------------------------------------------------------------------

这样我们就完成 maven对子模块的聚合 ,像我们平常用的dubbo jetty tomcat spring hibernate等等 都是按模块 去开发,一次编译 各个模块都能紧密联系在一起了。我们在平常开发项目也需要适当的去分模块开发,

这是dubbo的子模块,分了很多子模块:下载

2.什么是pom继承?

pom继承是为了抽出重复配置,通常配置在父模块中,为子模块提供使用,这样可以做到“一处声明,处处使用”。

2.1 继承结构

下载

2.2 pom标签配置-parent,*Management

1.常用的pom被继承的元素

Xml代码  下载

  1. groupId :项目组 ID ,项目坐标的核心元素;
  2. version :项目版本,项目坐标的核心元素;
  3. description :项目的描述信息;
  4. properties :自定义的 Maven 属性;
  5. dependencies :项目的依赖配置;
  6. dependencyManagement :醒目的依赖管理配置;
  7. repositories :项目的仓库配置;
  8. build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;

1.配置maven-aggregate pom文件:

Xml代码  下载

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-aggregate</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>pom</packaging>
  8. <!-- 子模块 -->
  9. <modules>
  10. <module>../maven-01</module>
  11. <module>../maven-02</module>
  12. <module>../maven-03</module>
  13. </modules>
  14. <!-- 统一配置构件的版本号 -->
  15. <properties>
  16. <junit.version>3.8.1</junit.version>
  17. </properties>
  18. <!-- 依赖管理 -->
  19. <dependencyManagement>
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>${junit.version}</version>
  25. <scope>test</scope>
  26. </dependency>
  27. </dependencies>
  28. </dependencyManagement>
  29. </project>

maven-01,maven-02,maven-03 需要配置parent ,dependencies,同时对junit做一个依赖,3个工程的pom配置如下:

Xml代码  下载

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <!-- 指定父pom的坐标及pom位置 -->
  5. <parent>
  6. <groupId>com.sohu.train</groupId>
  7. <artifactId>maven-aggregate</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <relativePath>../maven-aggregate/pom.xml</relativePath>
  10. </parent>
  11. <artifactId>maven-03</artifactId>
  12. <packaging>jar</packaging>
  13. <!-- 添加对junit依赖,这样公用配置只需要在maven-aggregate中去配置 -->
  14. <dependencies>
  15. <dependency>
  16. <groupId>junit</groupId>
  17. <artifactId>junit</artifactId>
  18. </dependency>
  19. </dependencies>
  20. </project>

这样就完成pom的继承,讲公用的jar一次配置,就可以实现多处引用了。

时间: 2024-10-03 23:46:18

maven的聚合模块和pom继承使用的相关文章

Maven实战——聚合与继承(上)

聚合 首先我们来看两个pom.xml文件,我们将通过这两个pom文件来引入我们要学习的聚合与继承 account-email <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-email</artifactId> <name>Account Email</name&

Maven之 聚合与继承 详解

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

maven学习系列6----聚合与继承

聚合 前面也讲过聚合的作用就是把多个模块(maven工程)放在一个模块内部,这个模块就可以说成是一个聚合,单独构建聚合模块就会把聚合在一起的其他模块一起构建(也可以配置只编译其中一部分模块).聚合模块的packageing必须是POM,聚合模块与被聚合的模块之间的关系如下图. 对于聚合模块来说,它知道有哪些被聚合的模块,但是被聚合的模块不知道这个聚合模块的存在. 假设聚合模块名为hello,需要聚合的模块名为hello1和hello2两个模块.这里只简单说一下聚合的配置方法,不涉及项目代码. 1

Maven聚合模块与继承和Maven的生命周期

端碗吹水 Maven聚合模块: 因为Maven是提倡模块化编程的,所以会以多个工程分为多个模块.如果所有的功能.模块都写在一个工程里的话,不方便于扩展.升级.修改.查看和团队开发,而且也不方便于模块的复用. Maven则是提倡将一个项目拆分成多个工程,每个工程完成一个模块或功能,这些工程就像零件一般,分别去进行开发,分为多个工程也方便于维护和分工合作. 每个工程模块可以通过pom配置文件实现串联,例如配置好pom文件之后,A工程可以直接对B工程的代码进行调用,C工程可以对A和B工程的代码进行调用

Eclipse下Maven工程多模块继承和聚合的创建

使用Maven对项目进行管理的时候,多模块的继承和聚合是必不可少的,本文简要说明一下在eclipse IDE下创建多模块工程. 1.Maven多模块的聚合 一个Maven工程下创建多个模块,然后用一个专门管理模块来将实际应用到的模块组织起来. 2.Maven多模块的继承 子模块通过继承父模块,来获的父模块中的pom.xml配置信息. 3.Maven多模块的继承+聚合 上图是将1和2组合起来,可以将父模块作为聚合模块和父模块,这样父模块就可以聚合(组织)其子模块,子模块可以继承父模块. 4.聚合和

Maven之——聚合与继承

Maven之--聚合与继承 1.    聚合 所谓聚合就是用一个pom.xml配置文件将一个或者多个项目关联起来.这样当我们执行聚合文件pom.xml的生命周期阶段的时候.他就会执行在聚合文件中指定聚合的所有项目的对应生命周期阶段. 包含聚合文件的是一个额外的模块.这个模块必须要有自己的POM文件.并切此聚合项目的POM的packaging必须是pom: <modelVersion>4.0.0</modelVersion> <groupId>org.andy.items

Maven实战——聚合与继承(下)

聚合与继承的关系 聚合是为了方便快速构建项目,继承是为了消除重复配置 共同点是两者的packaging都是pom,聚合模块与继承关系中的父模块除了pom之外都没有实际内容. 聚合关系与继承关系的比较: 在现有实际项目中,往往发现一个pom既是聚合pom又是父pom,这么做主要是为了方便.一般来说,融合使用聚合和继承没有什么问题.例如,可以将account-aggregator和account-parent合并成为一个新的account-parent,如下: <modelVersion>4.0.

Maven学习笔记(三):Maven的聚合和继承

Maven的聚合其实就是把各个项目拷贝到一个项目里,便于统一构建(这种是父子目录结构构件,个人喜欢这种,平行结构不喜欢),实现聚合的方式为: -- 新建一个普通的Maven项目,只保留pom文件,其他的目录结构都删除 -- 配置新建项目的pom文件: 1 <project ...> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>XXXX</groupId> 4 <artifactId>

Maven提高 多模块 vs 继承

Maven提高篇系列之一--多模块 vs 继承 这是一个关于Maven的提高系列,其中包含以下文章: 多模块 vs 继承 配置Plugin到某个Phase(以Selenium集成测试为例) 部署到自己的Repository(Nexus) 处理依赖冲突 编写自己的Plugin 通常来说,在Maven的多模块工程中,都存在一个pom类型的工程作为根模块,该工程只包含一个pom.xml文件,在该文件中以模块 (module)的形式声明它所包含的子模块,即多模块工程.在子模块的pom.xml文件中,又以