【发布时间】:2018-05-28 14:01:28
【问题描述】:
我使用 Apache Netbeans 9 Beta 9(2018 年 2 月 22 日)。我有一个 Java 9 模块应用程序。我想将Log4j 2 集成到我的应用程序中。这是我的modile-info.java。
module ru.itlect.remka.agent {
exports ru.itlect.remka.agent;
requires ru.itlect.remka.commons;
requires org.apache.logging.log4j.core;
requires org.apache.logging.log4j;
requires static spring.context;
requires java.logging;
requires java.xml;
requires java.sql;
requires java.desktop;
requires java.naming;
requires java.rmi;
requires static javafx.graphics;
requires static javafx.controls;
}
Netbeans 说找不到org.apache.logging.log4j 模块。 虽然org.apache.logging.log4j.core 没问题。当我构建项目时,它已成功构建。所以问题出在 Netbeans 本身。 java --list-modules 表示org.apache.logging.log4j 在log4j-api-2.11.0.jar 中。
如果我输入requeres log,Netbeans 建议log4j.api 是log4j-api-2.11.0.jar 的自动模块名称。 Thought Netbeans 说 log4j.api 也找不到。
我可以忍受 module-info.java 中不断出现的错误消息,但 Netbeans 看不到 log4j-api-2.11.0.jar 中的任何类,所以我在使用记录器的任何类中都有错误。 如何让 Netbeans 看到模块?
这是我的 pom.xml 的一部分:
<dependencies>
<!-- Ремка -->
<dependency>
<groupId>ru.itlect.remka</groupId>
<artifactId>commons</artifactId>
<version>1.0.0</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<!-- Аннотации -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Logs -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
【问题讨论】:
-
模块名称org.apache.logging.log4j正确。 Log4J-API 是一个multi-release JAR,并在
versions/9/module.info.class中定义了它的名称——我猜NetBeans 处理得不是很好。 -
这里也一样。我真的很想知道为什么模块在被 maven 导入并在 module-info.java 中需要时不会被看到(我真的很想将拼图射击到太空中非常遥远的地方)。
-
Log4j 2.9 不支持 java 9 模块。因此它被 NetBeans 和 Java 视为一个自动模块。
标签: java maven netbeans log4j java-9