ResolutionException в Java 11 - PullRequest
       76

ResolutionException в Java 11

1 голос
/ 08 февраля 2020

Я начал писать новое приложение в Java 11, и во время работы приложения я получил ошибку ниже. Я прочитал об этой проблеме и похоже, что это случай сплит-пакета. Но я не уверен, как я могу решить эту проблему.

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

Ниже приведены зависимости в pom для log4j и slf4j.

log4j

<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>

log4j2

Когда я пытался использовать log4j2 со следующими зависимостями, я получал другую ошибку

 <dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>

java.lang.module.ResolutionException: Modules log4j.core and log4j.api export package org.apache.logging.log4j to module java.annotation

1 Ответ

2 голосов
/ 09 февраля 2020

slf4j-log4j12 содержит класс с именем org.apache.log4j.MDCFriend.

Насколько я помню, это исправляет ошибку в log4j 1.x, которая возникала, когда шаблон определения версии был изменен в Java 9. Поскольку Log4j 1.x достиг конца жизни в августе 2015 года, ошибка не может быть исправлена. исправить там, чтобы SLF4J ввел это «исправление». К сожалению, использование org.apache.log4j пакета вне jar log4j запрещено в модульной системе Java, что является причиной проблемы, с которой вы сталкиваетесь.

Также обратите внимание, что ошибка безопасности CVE -2019-17571 создан для Log4j 1.x. Хотя ваше приложение, вероятно, не будет уязвимо для этой проблемы, оно будет отображаться при сканировании системы безопасности.

У вас есть несколько вариантов:

  1. Создать отчет об ошибке в SLF4J и надеяться, что все исправлено.
  2. Создайте свой собственный форк из slf4j-log4j12 и исправьте его самостоятельно.
  3. Обновите Log4j 1 до Log4j 2 (решение, которое я бы порекомендовал для нового приложения).
  4. Используйте реализацию SLF4J, отличную от Log4j 2.
...