Java 11中的ResolutionException

问题描述 投票:0回答:1

我已经开始用Java 11编写新的应用程序,并且在运行该应用程序时出现以下错误。我读到有关此问题的信息,看起来好像是拆分包的情况。但是我不确定如何解决此问题。

java.lang.module.ResolutionException: Modules slf4j.log4j12 and log4j export package org.apache.log4j to module kubernetes.model.common

我下面是pom中log4j和slf4j的依赖项。

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.26</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.26</version>
    </dependency>
java java-11 java-module
1个回答
1
投票

slf4j-log4j12包含一个名为org.apache.log4j.MDCFriend的类。

[我记得这是修复Java 9中更改版本检测模式时发生的log4j 1.x中的错误,由于Log4j 1.x于2015年8月寿终正寝,因此无法修复该错误,因此引入了SLF4J这个“修复”。不幸的是,在Java模块系统中禁止在log4j jar之外使用org.apache.log4j软件包,这是导致您看到问题的原因。

此外,请注意,已经为Log4j 1.x创建了安全漏洞CVE-2019-17571。尽管您的应用程序可能不会受到该问题的影响,但它会显示在安全扫描中。

您有几种选择:

  1. 创建针对SLF4J的错误报告,希望它得到解决。
  2. 创建您自己的slf4j-log4j12的fork,然后自行修复。
  3. 从Log4j 1升级到Log4j 2(我为新应用程序推荐的解决方案。)>
  4. 使用Log4j 2以外的SLF4J实现。
© www.soinside.com 2019 - 2024. All rights reserved.