Maven: модуль-info.java:[6,21] модуль не найден: org.slf4j

В настоящее время я переношу проект на 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), и у меня определенно есть зависимость от модуля org.slf4j, объявленная в моем pom.xml!

Чтобы упростить ситуацию, я создал небольшой минимальный тестовый проект, вызывающий ту же ошибку.

Вот тестовый проект 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 показывает мне существующий module-info.class в обоих JAR (т.е. в настоящее время внутри 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. журнал

Любая идея, что я делаю неправильно?

Обновление: я только что загрузил небольшой тестовый проект: co.codewizards.java9test.project1.7z


person Marco    schedule 31.07.2019    source источник
comment
У меня была своего рода связанная проблема, когда компилятор печатал module not found ошибку, но когда Пробовал пропатчить модуль. В моем случае модуль не был найден, потому что его просто не было в пути к модулю.   -  person St.Antario    schedule 01.08.2019
comment
Поэтому я бы посоветовал вам проверить путь к модулю.   -  person St.Antario    schedule 01.08.2019
comment
Спасибо за ваш ответ, но разве путь к модулю не генерируется автоматически из зависимостей, как и путь к классу? Или мне нужно как-то включить это? Я уже проверил документацию maven-compiler-plugin, но про путь к модулю ничего не написано. Единственное, что упоминает модули в контексте плагина maven-compiler-plugin, это this, в котором также не упоминаются какие-либо специальные настройки.   -  person Marco    schedule 01.08.2019


Ответы (2)


Ваши журналы maven показывают, что slf4j-api помещается в путь к классам, а не к пути к модулю.

Вам необходимо обновить версию maven-compiler-plugin, так как modulepath поддерживается только с версии 3.6, тогда как ваша сборка использует версию 3.1.

person Stephan Herrmann    schedule 01.08.2019

У меня возникла та же проблема из-за того, что более старая версия slf4j исходила из одной из зависимостей в pom. Поэтому я решил это, добавив ниже зависимость slf4j к моему pom:

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

информация о модуле:

module my.service {

requires org.slf4j; 
}
person Pukhraj soni    schedule 12.03.2020