`

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

阅读更多

转载请注明出处哈:http://yanan0628.iteye.com/blog/2270411
 

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项目做一个聚合,配置如下:

  

<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.sohu.train</groupId>
  <artifactId>maven-aggregate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <!-- 子模块 指定项目pom的位置   ..代表上一级目录-->
  <modules>
  	<module>../maven-01</module>
  	<module>../maven-02</module>
  	<module>..maven-03</module>
  </modules> 
  
</project>

  

   对 maven-aggregate执行下mvn clean compile

  

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.sohu.train:maven-02:jar:1.0-SNAPSHORT
[WARNING] 'dependencies.dependency.exclusions.exclusion.groupId' for junit:junit:jar is missing. @ line 38, column 16
[WARNING] 'dependencies.dependency.exclusions.exclusion.artifactId' for junit:junit:jar is missing. @ line 38, column 16
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:   //构建 maven 的反应堆,执行清理 编译的顺序
[INFO] 
[INFO] maven-02
[INFO] maven-01
[INFO] maven-03
[INFO] maven-aggregate
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-02 1.0-SNAPSHORT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-02 ---
[INFO] Deleting E:\train\test\maven-02\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-02 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\train\test\maven-02\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-02 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\train\test\maven-02\target\classes
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-01 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-01 ---
[INFO] Deleting E:\train\test\maven-01\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-01 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-01 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\train\test\maven-01\target\classes
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-03 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-03 ---
[INFO] Deleting E:\train\test\maven-03\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-03 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\train\test\maven-03\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-03 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\train\test\maven-03\target\classes
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-aggregate 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-aggregate ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:     // 可以看到 对3个maven项目 一起执行编译
[INFO] 
[INFO] maven-02 ........................................... SUCCESS [  1.874 s]
[INFO] maven-01 ........................................... SUCCESS [  0.108 s]
[INFO] maven-03 ........................................... SUCCESS [  0.158 s]
[INFO] maven-aggregate .................................... SUCCESS [  0.002 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.263 s
[INFO] Finished at: 2016-01-15T14:35:41+08:00
[INFO] Final Memory: 14M/227M
[INFO] ------------------------------------------------------------------------
 这样我们就完成 maven对子模块的聚合 ,像我们平常用的dubbo jetty tomcat spring hibernate等等 都是按模块 去开发,一次编译 各个模块都能紧密联系在一起了。我们在平常开发项目也需要适当的去分模块开发,
这是dubbo的子模块,分了很多子模块:

 

 

2.什么是pom继承?

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

2.1 继承结构

 

2.2 pom标签配置-parent,*Management

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

 

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

 

 1.配置maven-aggregate pom文件:

<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.sohu.train</groupId>
  <artifactId>maven-aggregate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <!-- 子模块 -->
  <modules>
  	<module>../maven-01</module>
  	<module>../maven-02</module>
  	<module>../maven-03</module>
  </modules> 
  <!-- 统一配置构件的版本号 -->
  <properties>
  	<junit.version>3.8.1</junit.version>
  </properties>
  
  <!-- 依赖管理 -->
  <dependencyManagement>
  	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>	
  </dependencyManagement>
</project>

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

<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>
    <!-- 指定父pom的坐标及pom位置 -->
    <parent>
    	<groupId>com.sohu.train</groupId>
		<artifactId>maven-aggregate</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath>../maven-aggregate/pom.xml</relativePath>
    </parent>
	<artifactId>maven-03</artifactId>
	<packaging>jar</packaging>
        <!-- 添加对junit依赖,这样公用配置只需要在maven-aggregate中去配置 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
	</dependencies>
</project>

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

 

 

所有文章:

   参考:项目管理和java文章列表

maven系列文章: 

  1).maven的安装及常用命令(一)

  2).maven的生命周期,插件介绍(二)

  3).maven的坐标,仓库介绍及配置(三)

  4).maven的pom介绍及配置(四)

  5).maven的依赖特性,冲突解决(五)

  6).maven的聚合模块和pom继承使用(六)

  7).maven的版本规范(七)

  • 大小: 26.2 KB
  • 大小: 17.8 KB
  • 大小: 30.9 KB
  • 大小: 4.6 KB
  • 大小: 21.7 KB
分享到:
评论
1 楼 cheleiyan 2016-07-03  
请教楼主,maven-aggregate是如何用eclipse创建的,eclpse 创建maven项目的时候选择什么类型呢?

相关推荐

    maven依赖+继承+聚合

    子模块只需要继承这个父POM,就可以直接使用父POM的配置。例如: ```xml &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;parent-project &lt;version&gt;1.0.0 ``` 这样,所有子模块就可以共享同一组依赖,简化了项目...

    maven多模块打包pom文件

    7. **继承与聚合**:Maven的多模块项目既可以是继承关系(子模块继承父模块的配置),也可以是聚合关系(父项目包含多个子项目)。本例中的`sample-parent`更侧重于聚合,因为它不包含代码,只负责协调子模块的构建...

    maven聚合和继承

    4. **代码组织**:聚合和继承结合使用,可以更好地组织项目结构,提高代码的可维护性和复用性。 在给定的资源中,"依赖和聚合"可能是对这两个概念的实例演示,通过实际的项目结构和配置文件,你可以更直观地理解...

    maven聚合项目

    总结来说,这个"Maven聚合项目"是一个集成了聚合、继承、插件管理和私服使用的实例,展示了如何高效地管理和构建多模块的Java项目。通过这种方式,开发团队可以更有效地协同工作,保证项目的稳定性和一致性。

    maven继承与聚合代码

    **二、Maven聚合** Maven的聚合功能则用于管理多个相关项目,把它们组合成一个整体。这主要通过`&lt;modules&gt;`标签来实现,它允许在一个POM中列出一系列子模块,使得我们可以一次性构建这些模块。聚合POM并不直接影响...

    maven多模块项目构建过程

    Maven多模块项目是指由一个父项目(或称为聚合项目)和若干个子项目组成的项目结构。这种结构便于代码组织,提高代码复用性,并能有效管理依赖关系。每个子项目都是独立的Maven项目,可以有自己的pom.xml配置文件,...

    通过Maven的聚合和继承特性创建多模块项目示例

    Maven,作为Java开发中的构建工具,提供了强大的聚合(Aggregation)和继承(Inheritance)特性,使得多模块项目的管理变得高效且有序。本文将深入探讨如何利用这两个特性来创建一个复杂的多模块项目,并通过提供的...

    Maven聚合与继承实例详解.docx

    通过在父POM中使用`&lt;modules&gt;`标签,可以列出所有子模块,Maven在构建时会按顺序编译和打包每个子模块。这在处理大型多模块项目时非常有用,因为它提供了整体构建和测试的能力。 例如,创建一个名为`web-app`的聚合...

    maven 依赖,聚合,继承,插件运行应用

    这些模块通过Maven的依赖、聚合和继承关系组织在一起,形成一个完整的项目结构。每个模块都有自己的POM.xml文件,定义了其依赖、构建配置和可能的子模块。 总结起来,Maven的依赖管理、聚合、继承和插件运行机制是...

    maven聚合工程demo

    总结来说,"maven聚合工程demo"是一个利用 Maven 聚合和继承机制,结合 SSH 框架构建的多模块 Java Web 应用项目。通过聚合,我们可以高效地管理多个子项目,通过继承,我们保持了配置的一致性。同时,"META-INF" 和...

    maven聚合实例

    Maven聚合允许我们在一个父项目中管理多个子项目,这个父项目被称为"聚合模块"或"顶级模块",在本例中是`demo-top`。这种结构使得我们可以一次性构建和测试所有子项目,而不是逐个处理。这大大提高了开发效率,并且...

    maven聚合项目模板

    通过理解和熟练运用Maven聚合项目模板,开发者可以更高效地管理和构建复杂的多模块项目,提高开发效率,降低维护成本。同时,这也符合软件工程中的模块化和分层设计原则,有助于保持代码的整洁和可维护性。

    maven 模块化项目demo

    Maven的“聚合”(aggregation)和“继承”(inheritance)特性使得管理大型多模块项目变得简单。聚合允许一个父POM包含多个子模块,而继承则允许子POM从父POM中继承配置,减少重复。 在“maven 模块化项目demo”中...

    maven 关于 scope test 和 继承传递的问题

    本文将深入探讨"Maven中scope test的使用以及依赖继承传递"这一主题,帮助开发者更好地理解和应用Maven的核心特性。 首先,`scope test`是Maven依赖管理中的一个关键概念。当我们在`pom.xml`文件中为某个依赖设置`...

    maven多模块

    4. **聚合(Aggregation)与继承(Inheritance)**:Maven的聚合功能允许在一个POM中管理多个模块,而继承则使得子模块可以共享父模块的配置,如依赖版本、插件配置等。这大大减少了配置的重复性。 5. **构建顺序...

    maven高级(分模块设计、继承、聚合、私服)

    在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、依赖管理和部署过程。...在实际开发中,合理利用Maven的分模块、继承、聚合和私服功能,可以有效地管理和构建大型复杂项目。

    java maven 聚合项目 分模块 socket 双向通信实例demo

    在Java开发中,Maven聚合项目(Aggregator Project)是一种管理多模块项目的方式,它允许开发者在一个父项目中集合并构建多个子项目。这样的结构有助于代码的组织和依赖管理,特别是当项目涉及到多个独立但相互关联...

    Maven的聚合与继承DEMO(以及前后端分离)

    Maven 的聚合和继承特性可以很好地支持这种架构,通过不同的模块分别处理前端和后端的构建,保持项目结构清晰,便于团队协作。 在实践中,我们可能需要创建以下类型的 Maven 子项目: 1. 前端项目:通常使用 ...

    Maven的多模块与继承[归纳].pdf

    Maven 的多模块项目和继承机制是解决大型复杂项目结构的有效方式,使得代码组织更有序,依赖管理更高效。 1. Maven 的多模块项目: Maven 的多模块项目允许将大型项目分解成多个相互依赖的小模块,每个模块专注于...

Global site tag (gtag.js) - Google Analytics