layout | title | key | tags | category | date | modify_date |
---|---|---|---|---|---|---|
article |
502 Maven-外部依赖 |
A20190409024 |
编程 JAVA基础 |
blog |
2019-04-09 22:19:24 +0800 |
2019-04-09 22:19:24 +0800 |
依赖传递
通过在POM中配置<dependencies>标签,可以指定项目依赖的第三方包或者插件,示例:
<dependencies>
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
Maven通过依赖传递,可以自动发现项目所有的依赖,A依赖B,B依赖C,C依赖D。在A的POM文件中不需要显示配置对C和D的依赖,Maven能够通过B和C POM文件中的依赖配置自动发现这些依赖关系。
同时,Maven对依赖的层级也没有限制,但需要注意Maven对于重复依赖的处理方式。
假设有两条依赖路线:
- A -> B -> C -> D 2.0
- A -> E -> D 1.0
D存在1.0和2.0两个依赖版本,此时Maven会按照以下方式选择D的版本。
- 最短路径优先。A到D在第一条路线有4层,第二条路线只有三层,因此Maven最终会选择D的1.0版本。
- 如果路径深度相同,最先声明的优先。
Dependency Management
<dependency management> 一般在多模块项目中使用,定义在所有模块的父POM里,用于集中管理通用的依赖信息,例如版本号,依赖范围。
这样在子POM中就不需要指定父POM里已经定义的信息了,例如下面的例子。
<!-- 父POM -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>A</artifactId>
<packaging>pom</packaging>
<name>A</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<!-- 子POM -->
<project>
<parent>
<artifactId>A</artifactId>
<groupId>maven</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<name>B</name>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
</dependency>
</dependencies>
</project>
<dependencyManagement>与<dependencies>的区别。
- <dependencyManagement>只是声明依赖,并不实际引入,因此子项目需要通过<dependencies>显示的声明依赖。
- <dependencies>即使在子项目中不写该依赖项,子项目仍然会从父项目中继承该依赖项。