【问题标题】:Update version of child dependency in pom.xml更新 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 以使用 log4j2.17 版本而不更改父 log4j2 版本。

我知道它可能不起作用并且可能会出现编译问题,但我仍然想先尝试一下。

我该怎么做?

【问题讨论】:

  • 首先你为什么使用旧的 spring boot 版本?此外定义一个新版本的 log4j-core 像 2.17.0

标签: java spring maven log4j


【解决方案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】:

    你可以使用&lt;dependencyManagement&gt;:

    <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 和适当的强制规则...
    • 为什么会误用解析机制?如果某些项目需要,则存在版本范围以指定依赖项的最小和最大版本。由于该项目至少需要该版本才能正常工作(没有安全问题),这似乎是一个不错的选择。
    • 但不是为了识别依赖需求...
    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多