![](/img/trans.png)
[英]karaf / filter:="(&(osgi.wiring.package=org.apache.logging.log4j)(version>=2.17.0)
[英]Compilation failure: module not found: org.apache.logging.log4j
我有一個用 Java 11 編寫的簡單應用程序。 mvn clean verify
(maven 3.6.0) 執行時出錯:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project parser: Compilation failure
[ERROR] ...src/main/java/module-info.java:[2,32] module not found: org.apache.logging.log4j
依賴項:
<log4j.version>2.11.1</log4j.version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
模塊信息.java:
module abc {
requires org.apache.logging.log4j;
}
Log4j2 配置是默認的並且在 .xml 文件中。 用法:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger logger = LogManager.getLogger(Abc.class);
logger.info("Boom!");
我在 stackoverflow 上嘗試了所有相關問題,但沒有成功。
您應該升級到maven-compiler-plugin:3.8.0
並將版本指定為 11 。
原因是,在描述log4j-api.jar
使用--release 11
聲明與您的指令中的名稱相同。
jar --file=.../.m2/repository/org/apache/logging/log4j/log4j-api/2.11.1/log4j-api-2.11.1.jar --describe-module --release 11
releases: 9
org.apache.logging.log4j jar:file://.../.m2/repository/org/apache/logging/log4j/log4j-api/2.11.1/log4j-api-2.11.1.jar/!META-INF/versions/9/module-info.class
exports org.apache.logging.log4j
exports org.apache.logging.log4j.message
exports org.apache.logging.log4j.simple
exports org.apache.logging.log4j.spi
exports org.apache.logging.log4j.status
exports org.apache.logging.log4j.util
requires java.base mandated
uses org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
uses org.apache.logging.log4j.spi.Provider
uses org.apache.logging.log4j.util.PropertySource
這主要是因為 log4j-api 是一個模塊化的 jar 。
另一方面, log4j-core
派生為一個自動模塊仍然在其MANIFEST.MF 中被覆蓋為
org.apache.logging.log4j.core
盡管更改了@Naman 提到的更新編譯器插件,但如果您使用 maven javadoc 插件生成帶有諸如“mvn clean install javadoc:javadoc”之類的命令的 javadoc,則可能會發生類似的錯誤:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.2.0:javadoc (default-cli) on project data-exchange-common-configuration: An error has occurred in Javadoc report generation:
[ERROR] Exit code: 1 - your.module\src\main\java\module-info.java:20: error: module not found: org.apache.logging.log4j
[ERROR] requires org.apache.logging.log4j;
[ERROR] ^
[ERROR]
[ERROR] Command line was: cmd.exe /X /C "C:\Programs\Java\Oracle\jdk-11.0.6\bin\javadoc.exe @options @packages @argfile"
[ERROR]
[ERROR] Refer to the generated Javadoc files in 'C:\Source\dex\dex1\ais-data-exchange\data-exchange-common\data-exchange-common-configuration\target\site\apidocs' dir.
現在的解決方案(直到問題在插件級別得到解決)是生成 api 文檔,將源版本設置為 java 8(同時將編譯器版本保持為 java 9+):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<source>8</source>
<detectJavaApiLink>false</detectJavaApiLink>
</configuration>
</plugin>
在上面的示例中,請看到我還設置了 false,這是由於在 java 8 中生成源代碼時存在的一些其他錯誤。無論如何將源參數設置為 8 並檢測JavaApiLink解決了該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.