【问题标题】:Maven: module-info.java:[6,21] module not found: org.slf4jMaven:module-info.java:[6,21] 未找到模块:org.slf4j
【发布时间】:2019-07-31 11:40:38
【问题描述】:

我目前正在将一个项目迁移到 Java 11(即 >= 9),并且因为 JavaFX 似乎在没有模块的情况下无法工作,所以我目前正在将 module-info.java 文件添加到所有子项目中。但我收到以下错误:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/mangu/workspace/cloudstore.2/co.codewizards.java9test.project1/src/main/java/module-info.java:[6,21] module not found: org.slf4j
[INFO] 1 error

我正在运行 OpenJDK 11.0.3、Maven 3.6.1(嵌入在 Eclipse 2019-06 中),并且我肯定对我的 pom.xml 中声明的模块 org.slf4j 有依赖关系!

为了简化事情,我创建了一个小的、最小的测试项目,导致同样的错误。

这是测试项目的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>co.codewizards.java9test</groupId>
    <artifactId>co.codewizards.java9test.project1</artifactId>
    <version>0.1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>9</maven.compiler.source>
        <maven.compiler.target>9</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.8.0-beta4</version>
        </dependency>
    </dependencies>

</project>

我尝试了两个:1.8.0-beta4 和 2.0.0-alpha0。 Eclipse 向我显示了两个 JAR 中现有的 module-info.class(即当前在 slf4j-api-1.8.0-beta4.jar 中)。

这是module-info.java

module co.codewizards.java9test.project1 {

    requires java.base;
    requires java.se;

    requires org.slf4j;

}

这是mvn clean install -Dmaven.test.skip=true -X 的输出(但在 Eclipse 中运行):mvn.log

知道我做错了什么吗?

更新:我刚刚上传了小测试项目:co.codewizards.java9test.project1.7z

【问题讨论】:

  • 当编译器打印 module not found 错误时,我遇到了 related issue 错误,但是当我尝试修补模块时。在我的情况下,找不到模块,因为它根本不包含在模块路径中。
  • 所以我建议你检查一个模块路径。
  • 感谢您的回复,但是模块路径不是像类路径一样从依赖项中自动生成吗?还是我必须以某种方式启用它?我已经检查了maven-compiler-plugin 的文档,但是没有关于模块路径的任何内容。在 maven-compiler-plugin 的上下文中唯一提到模块的是this,它也没有提到任何特殊设置。

标签: maven java-9 java-11 java-module


【解决方案1】:

您的 maven 日志显示 slf4j-api 被放置在类路径中,而不是模块路径中。

您需要将maven-compiler-plugin 的版本升级为modulepath is supported only since version 3.6,而您的构建使用的是3.1 版本。

【讨论】:

    【解决方案2】:

    由于旧版本的 slf4j 来自 pom.xml 中的依赖项之一,我遇到了同样的问题。所以我通过在我的 pom 中添加以下 slf4j 依赖来解决它:

          <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.29</version>
        </dependency>
    

    模块信息:

    module my.service {
    
    requires org.slf4j; 
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 2018-04-15
      • 2020-09-28
      相关资源
      最近更新 更多