设为首页 加入收藏

TOP

Maven依赖管理(一)
2023-07-26 08:16:06 】 浏览:76
Tags:Maven 赖管理

本文主要记录Maven依赖管理中关于依赖传递和依赖范围的知识

Maven项目示例

创建3个maven项目,分配依赖log4j 1.2.12, 1.2.13, 1.2.14版本。

<!--项目1-->
<groupId>com.leo</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.12</version>
	</dependency>
</dependencies>

<!--项目2-->
<groupId>com.leo</groupId>
<artifactId>project2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.13</version>
	</dependency>
</dependencies>

<!--项目3-->
<groupId>com.leo</groupId>
<artifactId>project3</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.14</version>
	</dependency>
</dependencies>

此时三个项目的依赖关系如图所示,三个项目分别依赖了不同版本的log4j。

image

依赖传递

现在我们构造这样一种情况,project3依赖log4j和junit,project2依赖log4j和project3,maven配置如下:

<!--项目2-->
<groupId>com.leo</groupId>
<artifactId>project2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.13</version>
	</dependency>
	<dependency>
		<groupId>com.leo</groupId>
		<artifactId>project3</artifactId>
		<version>1.0-SNAPSHOT</version>
	</dependency>
</dependencies>

<!--项目3-->
<groupId>com.leo</groupId>
<artifactId>project3</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.14</version>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
	</dependency>
</dependencies>

此时project2和project3的依赖关系如图:

image

此时project2的依赖关系中出现了project3以及project3所依赖的包。对于project2来说,此时不光可以使用project3,也可以使用project3所以来的junit包。

同时我们注意到,project3依赖了1.2.14版本的log4j,这与project2本身所依赖的1.2.13版本冲突了。

此时Maven会使用如下3个规则来选择哪个包生效:

  1. 依赖层级浅的包会覆盖依赖层级深的包。(示例中project2的log4j 1.2.13版本的依赖层级为1,1.2.14的依赖层级为2,因此第一层的版本生效)
  2. 同层依赖中,先声明的包版本生效。

image

  1. 同pom.xml文件中,后声明的版本生效。

依赖隐藏

如果不希望别人在依赖我的包时知道我的包依赖了哪些其他的包,那么可以在引用依赖时将其标注为<optional>true</optional>,这样别人在使用这个包时,就不会看到这个包依赖的包。

<!--项目2-->
<groupId>com.leo</groupId>
<artifactId>project2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>log4j</groupId>
		<
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spring 常用接口和类 下一篇文盘Rust -- 领域交互模式如何实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目