`
schy_hqh
  • 浏览: 558387 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Maven的聚合、继承(NEW)

 
阅读更多

 模块的聚合

 

聚合的好处:

统一对各个模块的编译,测试,打包,安装,发布操作,不用每个模块都单独编译,测试等

集中管理,批量执行Maven的命令(注:命令即插件,执行一个命令等同于运行一个插件!)

 用法:

新建一个Maven项目,修改POM,将package属性改为pom

使用Module标签引入其它模块

由于该聚合模块是新建的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.gc.user</groupId>
  <artifactId>user-aggregation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 此处,类型为pom -->
  <packaging>pom</packaging>
	
  <!-- 将其它模块放到一起,集中执行命令 -->
  <modules>
  	<module>../user-core</module>
  	<module>../user-dao</module>
  </modules>
  
</project>

 

 

====================================================================

 

 

模块的继承

 

引入继承带来的好处:

将各个模块中相同的配置定义到一个文件中,由其它模块来继承

提高pom文件配置的重用性,而且可以单点维护---单一职责原则!

 

用法:

新建一个Maven项目,将其artifactId设置为user-parent

修改package属性为pom

 

parent模块

<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.gc.user</groupId>
	<artifactId>user-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<name>user-parent</name>
	
	<url>http://maven.apache.org</url>

	<!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 -->
	<properties>
		<project.version>0.0.1-SNAPSHOT</project.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<my.jar.source>d:/</my.jar.source>
		<junit.version>4.10</junit.version>
	</properties>

	<!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 
		所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 -->
	<dependencyManagement>
		<dependencies>
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-core</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-dao</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 其它依赖 -->			
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>4.2.6.Final</version>
			</dependency>

			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.1.26</version>
			</dependency>

			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>1.2.16</version>
			</dependency>

			<dependency>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>servlet-api</artifactId>
				<version>2.5-6.0.0</version>
				<scope>provided</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>


</project>

  

 

子模块user-core模块继承parent模块

<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.gc.user</groupId>
		<artifactId>user-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<artifactId>user-core</artifactId>
	<!-- groupId和version将从parent继承,无需定义 -->
	<packaging>jar</packaging>

    <!-- properties将从parent继承,无需定义  -->
    
	<name>user-core</name>
	
	
	
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
                        <!-- version无需定义,会从parent继承下来 -->
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
		</dependency>

		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>

	</dependencies>
</project>

 

 

子模块user-dao模块继承parent模块

  

<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.gc.user</groupId>
  	<artifactId>user-parent</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>user-dao</artifactId>
  <packaging>jar</packaging>

  <name>user-dao</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    
    <!-- 引入user-core,将会发生传递性依赖:user-core中的依赖是否会导入到本模块中,还要根据scope决定! -->
  	<dependency>
  		<groupId>com.gc.user</groupId>
  		<artifactId>user-core</artifactId>
  		<exclusions>
	  		<!-- 排除user-core模块中关于log4j的依赖 -->
  			<exclusion>
  				<groupId>log4j</groupId>
  				<artifactId>log4j</artifactId>
  			</exclusion>
  		</exclusions>
  	</dependency>
  	
  </dependencies>
</project>

 

 

====================================================================

 

  

将聚合与继承集中到parent模块的POM中 

 

user-parent模块,既提供聚合又提供继承

 

<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.gc.user</groupId>
	<artifactId>user-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>


	<!-- 将其它模块放到一起,集中执行命令 -->
	<modules>
		<module>../user-core</module>
		<module>../user-dao</module>
	</modules>


	<name>user-parent</name>
	
	<url>http://maven.apache.org</url>

	<!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 -->
	<properties>
		<project.version>0.0.1-SNAPSHOT</project.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<my.jar.source>d:/</my.jar.source>
		<junit.version>4.10</junit.version>
	</properties>

	<!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 
		所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 -->
	<dependencyManagement>
		<dependencies>
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-core</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-dao</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 其它依赖 -->			
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>4.2.6.Final</version>
			</dependency>

			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.1.26</version>
			</dependency>

			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>1.2.16</version>
			</dependency>

			<dependency>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>servlet-api</artifactId>
				<version>2.5-6.0.0</version>
				<scope>provided</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>


</project>

 

分享到:
评论

相关推荐

    maven多模块项目构建过程

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

    Maven安装配置教程及仓库、POM坐标系、Maven工程、继承与聚合

    ### Maven安装配置教程及仓库、POM坐标系、Maven工程、继承与聚合 #### Maven安装与配置 在开始之前,我们首先需要了解Maven是什么。Maven是Apache的一个项目,是一个项目管理和综合工具,主要用来帮助Java项目...

    Maven依赖管理项目构建工具.pdf

    七、Maven工程继承和聚合关系 1. Maven工程继承关系 一个父pom可以定义共享的依赖、插件、属性等,子项目通过元素继承这些配置。 2. Maven工程聚合关系 通过元素,一个父项目可以聚合多个子项目,方便进行整体构建...

    maven3.0.4学习教程

    聚合和继承是Maven中的两个重要概念,它们之间有着密切的关系: - **聚合**:用于组织多个子项目,实现集中管理和构建。 - **继承**:用于共享配置信息,减少重复配置。 #### 六、私服 Maven私服是一种内部使用的...

    idea使用maven创建的web项目

    在Idea中,还可以利用Maven的“聚合”(Aggregation)和“继承”(Inheritance)特性来简化大型项目的配置。聚合允许你将多个Maven项目作为一个单元进行管理,而继承则允许子项目共享父项目的一些配置,避免重复代码...

    maven3的教程

    Maven3教程 一、前言 Maven是一个强大的Java项目管理...通过本教程,初学者可以掌握Maven的基础知识,包括安装、配置、项目创建、依赖管理、仓库使用以及聚合与继承的概念,为进一步深入学习和使用Maven打下坚实基础。

    Maven学习手册

    选择菜单“File” &gt; “New” &gt; “Maven Project”,然后按照向导步骤操作,选择合适的archetype并输入项目信息。 ### 4. Maven基本使用 4. **依赖管理** 在`pom.xml`文件中声明项目依赖,Maven会自动下载并管理...

    项目管理Maven实战

    **3.4 聚合与继承** 聚合允许在一个顶级项目中管理多个子模块,从而简化了多模块项目的构建。继承则允许子项目继承父项目的配置,减少了重复配置的工作量。 #### 四、Maven的高级特性 **4.1 使用Nexus建立私服** ...

    IntelliJ IDEA 构建maven多模块工程项目.docx

    1. **继承(Inheritance)**:Maven的继承机制类似于Java的类继承,父模块(Parent Module)可以定义一些共有的配置,如版本号、依赖管理等,子模块可以直接继承这些配置,避免重复定义,提高代码的可维护性。...

    maven教程.docx

    5. **项目聚合与继承**:多个Maven项目可以通过聚合(aggregation)和继承(inheritance)关系进行组织,简化大型项目管理。 【Maven的项目结构】 Maven遵循一套标准的项目目录结构,以方便管理和构建: - `src/...

    maven eclipse插件

    - 集成Maven的聚合和继承特性。 ** 总结 ** Maven Eclipse插件使得开发者能够在Eclipse IDE中无缝地使用Maven,提升了开发效率。通过插件,开发者可以方便地管理项目依赖,执行构建任务,以及进行项目配置,无需...

    Maven课程1

    5. **聚合与继承特性:** Maven支持项目结构的分层管理,通过聚合和继承机制,可以有效地组织和管理多个子模块。 6. **生命周期与插件管理:** Maven的核心是一个容器,用于管理项目的构建生命周期和插件。通过插件...

    maven的配置

    4. **聚合与继承**: 多模块项目中,可以使用`&lt;modules&gt;`标签聚合多个子项目,通过`&lt;parent&gt;`标签实现父子POM的继承,共享配置。 通过以上步骤,你已经在Eclipse中成功配置了Maven。现在,你可以享受Maven带来的自动...

    Maven实战PDF

    Maven支持项目之间的聚合和继承,使得多个模块可以被一起构建和部署,同时也可以重用基础项目的配置。 #### 四、高级主题 **4.1 使用Nexus建立私服** Nexus是一个企业级的Maven仓库管理器,可以帮助企业搭建私有...

    maven3.0.4详解

    - 聚合和继承是相互独立的概念,可以单独使用也可以结合使用。 - 聚合主要用于管理项目结构,而继承用于共享配置。 4. **Maven可继承的POM元素** - `&lt;groupId&gt;`, `&lt;artifactId&gt;`, `&lt;version&gt;`等基本项目信息不可...

    IntelliJ IDEA 构建maven多模块工程项目(详细多图)

    4. 创建聚合工程 c:在 c 模块下新建一个 Maven 工程模块 c1,继承 c 模块配置 c1 工程路径,finish 完成 c1 模块创建。 5. 创建 c2 模块:依赖 c1 模块,c 工程模块依赖 b 工程模块。 项目结构 这种项目结构主要...

    java-maven-practice

    7. **聚合与模块**:Maven支持项目聚合,可以将多个子项目组合成一个父项目,便于管理和构建。 在实际工作中,掌握这些Java和Maven的知识点能够帮助开发者高效地编写、构建和维护Java应用程序,同时也有利于团队...

    springboot基于RestHighLevelClient实现ElasticSearch各项操作

    现在,我们可以创建一个Elasticsearch的Repository接口,它继承自`ElasticsearchRepository`。这个接口提供了基本的CRUD操作: ```java public interface MyDocumentRepository extends ElasticsearchRepository, ...

    Spring-elastic-search-rest-high-level-client.zip

    这通常通过在`pom.xml`文件中引入`spring-boot-starter-data-elasticsearch`和`elasticsearch-rest-high-level-client`的Maven依赖来完成。这将确保我们的应用程序能够与Elasticsearch服务器进行通信。 接着,我们...

Global site tag (gtag.js) - Google Analytics