更新 pom.xml 中子依赖项的版本
Posted
技术标签:
【中文标题】更新 pom.xml 中子依赖项的版本【英文标题】:Update version of child dependency in pom.xml 【发布时间】:2022-01-22 00:25:36 【问题描述】:在我的 Spring Boot 应用程序中,我使用的是 log4j2
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
默认选择哪个版本-
<version>2.1.6.RELEASE</version>
这个版本的log4j2
内部使用log4j
:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
<scope>compile</scope>
</dependency>
最近宣布 - log4j 在版本 2.16
之前存在一些严重漏洞。
到目前为止还没有log4j2
的版本使用更安全的版本 - 2.17 of log4j
。
所以我想首先尝试更新我的 pom 以使用 log4j
的 2.17
版本而不更改父 log4j2
版本。
我知道它可能不起作用并且可能会出现编译问题,但我仍然想先尝试一下。
我该怎么做?
【问题讨论】:
首先你为什么使用旧的 spring boot 版本?此外定义一个新版本的 log4j-core 像 2.17.0 【参考方案1】:我建议通过 bom 文件定义 log4j,如下所示:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.17.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
【讨论】:
【参考方案2】:你可以使用<dependencyManagement>
:
<dependencyManagement>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>[2.17.0,)</version>
</dependency>
</dependencyManagement>
这会将依赖项 log4j-core
(如果存在)配置为使用 2.17 或更高版本(请参阅 Version Range References)。
将dependencyManagement
部分放在您的dependencies
部分旁边。
【讨论】:
不要使用版本范围...只需将新版本写入其中... 目的是强制至少那个版本。如果没有使用版本,maven 的版本解析可以使用旧版本。如果使用了版本范围并且无法解决,则构建将失败(比漏洞好)。 该分辨率不会单独使用旧版本。仅当将一个版本定义为目录或传递依赖项时。如果根本没有使用/定义任何版本,则不会解决依赖关系。这是对解析机制的滥用如果你想阻止特定版本使用 Maven Enforcer Plugin 和适当的强制规则... 为什么会误用解析机制?如果某些项目需要,则存在版本范围以指定依赖项的最小和最大版本。由于该项目至少需要该版本才能正常工作(没有安全问题),这似乎是一个不错的选择。 但不是为了识别依赖需求...以上是关于更新 pom.xml 中子依赖项的版本的主要内容,如果未能解决你的问题,请参考以下文章