`

Maven的dependencyManagement

阅读更多
http://blog.sina.com.cn/s/blog_6125fe5d0100zxrz.html
结论:
scope写在子项目中的<dependencies> 下的<dependency>中,或是写在父项目中的<dependencyManagement>中,都是可以的。
但有一点需要注意,dependencies 和 dependencyManagement 的区别在于:
前者,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项。
后者,如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的;只有在子项目中写了该依赖项,才会从父项目中继承该项,并且version 和 scope 都读取自 父pom。



今天我在配置 sellercenter 的接口测试环境的时候,发现一些依赖的写法不太一致:

比如有的依赖的<scope>是写在子项目中的 <dependencies> 下的<dependency> 标签中,

而有的依赖的<scope>是写在父项目中的<dependencyManagement> 中 。

我知道前一种写法是对的,而后一种写法却不知道对不对了,从网上查了下,没有找到非常确切的答案,于是自己验证了一把。

把验证过程给大家说下,大家也可以自己练手。

首先新建三个项目,Parent作为父项目、projectA、projectB作为子项目。

在父项目Parent中依赖项如下:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

在子项目projectA、projectB中没有写任何依赖,在projectA 下运行命令 mvn help:effective-pom,会发现A下面有 junit 4.8.1的依赖。

如果我把 父项目Parent 中的依赖修改如下:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>

子项目ProjectA、projectB下面还是没有任何依赖项,在projectA 下运行命令 mvn help:effective-pom,会发现A下面 没有 junit 4.8.1的依赖。

如果我在projectA 下添加junit的依赖:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>

再在projectA 下运行命令 mvn help:effective-pom,会发现A下面有了 junit 4.8.1的依赖,并且scope为 test。

那么经过验证,scope写在子项目中的<dependencies> 下的<dependency>中,或是写在父项目中的<dependencyManagement>中,都是可以的。

但有一点需要注意,dependencies 和 dependencyManagement 的区别在于:

前者,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项。

后者,如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的;只有在子项目中写了该依赖项,才会从父项目中继承该项,并且version 和 scope 都读取自 父pom。

另外一篇:

Maven在dependencyManagement元素中为你提供了一种方式来统一依赖版本号。你经常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。

Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。


<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>a-parent</artifactId>
  <version>1.0.0</version>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.2</version>
      </dependency>
     
    <dependencies>
  </dependencyManagement>
来源:http://www.blogjava.net/jjshcc/archive/2011/07/08/353914.html


然后,在子项目中,你可以使用如下的依赖XML添加一个对MySQL Java Connector的依赖:
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.sonatype.mavenbook</groupId>
    <artifactId>a-parent</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>project-a</artifactId>
 
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
  </dependencies>
</project>


如果mysql-connector-java在顶层父项目中被作为一个依赖列出,这个层次中的所有项目都将引用该依赖。使用dependencyManagement能让你统一并集中化依赖版本的管理,而不用添加那些会被所有子项目继承的依赖。
分享到:
评论

相关推荐

    Apache Maven Dependency Management

    If you are working with Java or Java EE projects and you want to take advantage of Maven dependency management, then this book is ideal for you. This book is also particularly useful if you are a ...

    Maven dependencies与dependencyManagement的区别详解

    今天,我们将详细介绍 Maven 依赖管理机制中的两个重要概念:dependencies 和 dependencyManagement。 dependencies dependencies 是 Maven 项目中最基本的依赖管理机制。它定义了项目中需要的依赖项,包括 jar 包...

    Maven 实战问题和最佳实践.pdf

    dependencyManagement 是表⽰依赖 jar 包的声明,即你在项⽬中的 dependencyManagement 下声明了依赖,maven 不会加 载该依赖,dependencyManagement 声明可以被继承。 dependencyManagement 的⼀个使⽤案例是当有⽗...

    Maven的Dependency测试

    当多个依赖有相同的`groupId`和`artifactId`但不同版本时,Maven会根据`dependencyManagement`来解决冲突。 4. **测试框架集成** Maven支持与JUnit、TestNG等测试框架集成,通过`maven-surefire-plugin`插件运行...

    dependencyManagement与dependencies区别.docx

    在Maven项目中,`dependencyManagement`和`dependencies`元素都是用来管理项目依赖的重要部分,但它们的作用方式有所不同。理解这两个元素的区别对于构建稳定、可维护的多模块项目至关重要。 一、dependency...

    Gradle.Dependency.Management.1784392782

    Learn how to use Gradle's powerful dependency management through extensive code samples, and discover how to define, customize, and deploy dependencies About This Book Be in total control of your ...

    maven-dependency-management-extension-1.0.1.jar

    maven-dependency-management-extension-1.0.1.jar

    maven-dependency-management-extension-1.0.0.jar

    maven-dependency-management-extension-1.0.0.jar

    maven-dependency-management-extension-1.1.0-sources.jar

    maven-dependency-management-extension-1.1.0-sources.jar

    maven-dependency-management-extension-1.0.1-sources.jar

    maven-dependency-management-extension-1.0.1-sources.jar

    maven-dependency-management-extension-1.0.0-sources.jar

    maven-dependency-management-extension-1.0.0-sources.jar

    maven3.2.5安装包下载

    Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装步骤 先下载,下载完成后,解压到某个目录  ...

    maven-dependency-analyzer:Apache Maven依赖性分析器

    这样,您可以确保您不会浪费时间在Apache Maven范围之外的东西上。 假设您的问题不存在,请提交该问题的票证。 清楚地描述问题,包括在出现错误时重现的步骤。 确保填写您知道存在问题的最早版本。 在GitHub上...

    Spring3.2(Spring-Framework-Reference 3.2)

    而在“Maven Dependency Management”和“Ivy Dependency Management”中,分别讨论了使用Maven和Ivy作为依赖管理工具时如何处理Spring依赖。 在日志处理方面,Spring3.2支持多种日志框架,例如Commons Logging、...

    dependency-management-plugin:一个Gradle插件,提供类似Maven的依赖项管理功能

    依赖管理插件 ... 要了解有关使用Dependency Management插件的更多信息,请参阅其。 贡献 该项目的贡献者同意遵守其。 是受欢迎的。 有关详细信息,请参见。 执照 依赖性管理插件是在下发行的开源软件。

    maven项目pom.xml中parent标签的使用.docx

    "Maven 项目 pom.xml 中 parent 标签的使用" ...Maven 项目 pom.xml 文件中的 parent 标签和 `&lt;dependencyManagement&gt;` 标签是依赖管理的核心组件,它们可以简化项目间的依赖管理,使得项目结构更加清晰、易于维护。

    spring-framework-reference.pdf

    - **Maven Dependency Management**:使用Maven可以方便地管理Spring框架及其相关组件的依赖。通过在pom.xml文件中定义依赖项,Maven会自动下载所需的库并解决版本冲突问题。 - **Ivy Dependency Management**:Ivy...

    apache-maven-3.8.1

    Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)和用来运行【定义在生命周期阶段(phase)中插件(plugin)...

Global site tag (gtag.js) - Google Analytics