Maven:未找到module-info.java:[6,21]模块:org.slf4j

时间:2019-07-31 11:40:38

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

我当前正在将项目迁移到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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

由于slf4j的较旧版本来自pom的依赖项,因此我遇到了同样的问题。因此,我通过将以下slf4j依赖项添加到pom中来解决了该问题:

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

module-info:

module my.service {

requires org.slf4j; 
}