【问题标题】:Netbeans + Java 9 Modules + Log4j 2.11 = Module not foundNetbeans + Java 9 模块 + Log4j 2.11 = 未找到模块
【发布时间】: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.log4jlog4j-api-2.11.0.jar 中。 如果我输入requeres log,Netbeans 建议log4j.apilog4j-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


【解决方案1】:

我在更新某些应用程序以使用 Log4j2 V2.11.1 作为模块时也遇到了问题。我创建了一个简单的测试用例,并在 Netbeans 用户邮件列表中提出了它。

截至今天早些时候,已发现并修复了最新版本的 Netbeans 9 中的一个错误。 Pull request 941,今天早上 Geertjan 批准的,解释说。邮件列表 (users@netbeans.incubator.apache.org) 包含在将修复程序合并到新版本之前解决问题的建议。一个新版本正在进入NetCAT (Community Acceptance Testing) 进程。开发人员会感谢社区帮助更快地完成它,这可能是最好的前进方式。

如果您需要立即解决方案,讨论中建议的一种方法是编辑 jar 文件以将 module-info.class 文件移动到根结构中。

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2018-06-23
    • 2018-04-06
    • 2020-02-21
    相关资源
    最近更新 更多