`

Maven核心概念之依赖,聚合与继承

阅读更多

Maven核心概念之依赖,聚合与继承

 754人阅读 评论(6) 收藏 举报
 分类:
Maven(3) 
 

目录(?)[+]

 

宏观图

                            

一、依赖

 

        我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入。       

[html] view plain copy
 
 print?
  1. <dependency>  
  2.   
  3.    <groupId>junit</groupId>  
  4.   
  5.    <artifactId>junit</artifactId>  
  6.   
  7.    <version>4.10</version>  
  8.   
  9.  </dependency>  
 

 

1.依赖范围

 

        通过控制依赖的范围,可以指定该依赖在什么阶段有效。         

[html] view plain copy
 
 print?
  1. <dependency>  
  2.   
  3.      <groupId>junit</groupId>  
  4.   
  5.      <artifactId>junit</artifactId>  
  6.   
  7.      <version>4.10</version>  
  8.   
  9.      <scope>test</scope>  
  10.   
  11.    </dependency>  

 

           maven的几种依赖范围(<scope></scope>)

 

名称

有效范围

Compile

编译,测试,运行。默认的依赖范围

Test

测试,如Junit

Runtime

运行,如JDBC

Provided

编译,测试,如ServletAPI  

System

编译,侧四,依赖于系统变量

 

2.依赖具有传递性

 

2.1依赖传递的规则

        

            规则-级别一样,就先用第一个,级别不一样,就用级别最少的

            解释:级别(依赖的层次)一样的,就按照顺序,依赖第一个(层次为0);如果出现层次(层次>0),就先依赖层次最少的; 

 

2.2去除依赖的两种方式

 

选择性依赖

         在依赖中用<optional>直接去除这种依赖传递的特性,也就是说,如果别的项目引用设置了此依赖的项目,这个commons-longging不会被依赖到。例如在项目A中配置commons-logging的依赖,如果项目B依赖项目A,那么,此时项目B中不会依赖commons-logging了。

[html] view plain copy
 
 print?
  1. <!-- 排除依赖 -->   
  2.   
  3.  <dependency>  
  4.   
  5.  <groupId>commons-logging</groupId>  
  6.   
  7.  <artifactId>commons-logging</artifactId>  
  8.   
  9.  <version>1.1.1</version>  
  10.   
  11.  <optional>true<optional>  
  12.   
  13.  </dependency>  

 

排除依赖

         如果第三方的jar包没有用<optional>去除依赖的传递性,那么我们可以在当前的项目中使用<exclusion>元素声明排除依赖。例如,项目A中配置了spring-core的依赖,如果项目B需要引用项目A,但是同时又不需要commons-logging的包,这个时候使用<exclusion>元素排除即可,这种用法可以刻解决包版本冲突的问题。

 

[html] view plain copy
 
 print?
  1. <!-- 排除依赖 -->  
  2.   
  3.  <dependency>     
  4.   
  5.          <groupId>org.springframework</groupId>   
  6.   
  7.          <artifactId>spring-core</artifactId>   
  8.   
  9.             <exclusions>  
  10.   
  11.                     <exclusion>  
  12.   
  13.                             <groupId>commons-logging</groupId>  
  14.   
  15.                             <artifactId>commons-logging</artifactId>  
  16.   
  17.                     </exclusion>  
  18.   
  19.             </exclusions>  
  20.   
  21. </dependency>  

 

 二、聚合

 

         一个项目往往由多个模块构成的,在进行构建时,针对每个模块都进行构建命令是一件非常繁琐又容易出错的事情,所以Maven的聚合功能能够替我们完成进行一次构建命令完成全部模块的构建

          Maven的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为POM,通过<modules>将各模块集中到父POM中。

[html] view plain copy
 
 print?
  1. <!-- 把这三个模块聚合在一起, <module></module> 中间的内容为子模块工程名的相对路径 -->  
  2.   
  3. <modules>  
  4.   
  5.         <module>../user-core</module>  
  6.   
  7.         <module>../user-log</module>  
  8.   
  9.         <module>../user-service</module>  
  10.   
  11. </modules>  

 

          原理:父类型的模块,不需要有源代码和资源文件,也就是说,没有 src/main/java 和 src/test/java 目录。Maven会首先解析聚合模块的 POM 文件,分析要构建的模块,并通过各模块的依赖关系计算出模块的执行顺序,根据这个潜在的关系依次构建模块。

 

三、继承

 

         Maven中继承的概念与面向对象的继承概念是一致的,通过继承消除重复编码的行为。在这里,我们也可以用一个父模块来完成父模块与子模块共用依赖的继承关系。父模块

         父模块的POM文件声明与平常一样,提取公共地方,子模块需要继承父模块。 

[html] view plain copy
 
 print?
  1. <!--继承user-parent的父模块-->  
  2.   
  3. lt;parent>  
  4.   
  5.          <groupId>com.tgb.bobo</groupId>  
  6.   
  7.          <artifactId>user-parent</artifactId>  
  8.   
  9.          <version>0.0.1-SNAPSHOT</version>  
  10.   
  11.          <!-- 继承的绝对路径是pom文件 -->  
  12.   
  13.          <relativePath>../user-parent/pom.xml</relativePath>  
  14.   
  15.  </parent>  
  16.   
  17. <!--本模块的声明-->  
  18.   
  19.  <artifactId>user-service</artifactId>   
  20.   
  21.  <packaging>jar</packaging>  

         并不是所有的POM元素都可以被继承,如图表3是一个可继承的元素列表:

 

             

 

          聚合和继承存在一些共性和潜在的联系,在实际应用中,经常将聚合模块的父模块和继承的父模块定义为同一个。

 

转载:http://blog.csdn.net/caozhangyingfei0109/article/details/47088559

分享到:
评论

相关推荐

    maven依赖+继承+聚合

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

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

    在"Maven 依赖,聚合,继承,插件运行应用"这个主题中,我们将深入探讨这四个核心概念。 1. **依赖管理**:Maven依赖是项目中各个模块之间共享代码的关键机制。当你在POM.xml文件中声明一个依赖,Maven会自动下载并...

    maven继承与聚合代码

    Maven的核心概念之一就是项目对象模型(Project Object Model,简称POM),它是Maven配置的基础。本篇文章将深入探讨Maven的两个重要特性:继承(Inheritance)和聚合(Aggregation),并结合提供的资源《一头扎进...

    maven聚合和继承

    Maven的核心概念包括项目对象模型(Project Object Model,POM)、依赖管理和生命周期。在Maven中,"聚合"和"继承"是两个重要的特性,它们有助于管理和组织大型的多模块项目。 **一、Maven聚合** Maven聚合...

    maven_package 依赖包(完整)

    Maven的核心概念之一是项目对象模型(Project Object Model,POM),这是一个XML文件,包含了项目的配置信息,如项目依赖、构建目标、构建过程等。通过POM,Maven能够自动下载所需的依赖库,避免了手动管理jar文件的...

    Maven初识,核心概念,构建多模块系统

    Maven的多模块系统构建通过继承与聚合,让项目组织结构变得清晰,并且可以轻松地复用配置信息,提高构建的效率。在实际使用中,Maven还提供了一系列的构建命令,用于在不同的生命周期阶段执行相应的构建任务。通过...

    Maven 多项目依赖关系

    每个Maven项目都有一个核心配置文件——`pom.xml`,它定义了项目的元数据,包括项目名称、版本、描述、开发者信息以及项目依赖。在多项目环境中,`pom.xml`文件还负责声明其他子项目或外部库的依赖关系。 二、模块...

    apache maven核心组件学习与使用

    POM是Maven的核心概念,它是一个XML文件,包含了项目的配置信息,如项目依赖、构建目标、构建过程等。通过POM,Maven能够理解项目的结构和需求,并自动完成构建任务。POM中的关键元素包括项目坐标(groupId、...

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

    接下来,我们讨论Maven的依赖继承与传递。在Maven的多模块项目中,一个父`pom.xml`可以定义一些通用的配置,包括依赖。如果一个子模块没有声明某个依赖,但是其父模块已经声明并且设置了作用域,那么这个依赖会**...

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

    2. Maven工程核心信息配置和解读(GAVP) pom.xml文件中的元素包含了GAVP信息以及其他配置,如用于定义项目依赖。 3. Maven工程依赖管理配置 在中添加、删除或更新依赖项,可以控制依赖的版本和范围(如compile、...

    Maven学习笔记

    Maven核心概念** - **POM**: Maven的中心概念,是一个XML文件,包含了项目的基本信息,如项目坐标(groupId, artifactId, version)、依赖、插件等。 - **依赖管理**: Maven通过POM文件管理项目所依赖的库,依赖...

    maven常用包

    一、Maven核心概念 1. 项目对象模型(Project Object Model,POM):Maven的中心概念,它是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖、构建目标等。 2. 仓库:Maven通过仓库获取依赖,如本地仓库...

    Maven 实战源码

    1. Maven核心概念: - POM:项目对象模型,是Maven的核心,用于定义项目属性、依赖、构建目标等。 - 生命周期:包括清理、初始化、编译、测试、打包、验证、部署等多个阶段,每个阶段都有预定义的默认目标。 - ...

    Maven权威指南_maven_

    POM包含了项目的基本信息、构建指令、依赖关系和插件配置等,是Maven工作的核心。 2. **Maven仓库** Maven利用中央仓库来管理各种项目的依赖,包括JAR包、源码、文档等。开发者只需在POM中声明依赖,Maven会自动...

    apache-maven-3.3.3

    1. **POM**:POM是Maven的核心概念,它是项目配置的中心文件,包含了项目的基本信息,如项目名称、版本、开发者信息、依赖库等。POM通过继承、聚合和依赖管理来简化项目配置。 2. **依赖管理**:Maven通过POM中的...

    尚硅谷Maven课程笔记代码资源

    五、Maven的继承与聚合 Maven支持项目间的继承和聚合。继承允许子项目共享父项目的配置,减少了重复代码。聚合则可以将多个项目组织成一个整体,方便一起构建和部署。 六、Maven profiles profiles是Maven中的环境...

    最新Maven版本:apache-maven-3.6.0

    Maven的核心概念是项目对象模型(Project Object Model,简称POM)。POM是一个XML文件,包含了项目的配置信息,如项目描述、依赖关系、构建目标、构建过程等。通过POM,Maven能够自动化处理构建任务,如编译、测试、...

    maven构建项目可以粘贴的内容

    一、Maven核心概念 1. 项目对象模型(Project Object Model,POM):Maven的中心概念是POM,它是项目的配置文件,通常以`pom.xml`的形式存在。POM包含了项目的基本信息,如项目名称、版本、开发者信息,以及项目...

    apache-maven-3.3.9.rar

    **一、Maven核心概念** 1. **项目对象模型(Project Object Model,POM)** Maven的核心是POM,它是项目配置信息的XML文件。POM包含了项目的基本信息,如项目名称、版本、描述、依赖、构建设置等。通过POM,Maven...

Global site tag (gtag.js) - Google Analytics