Java 11 Eclipse находит автоматический модуль, Maven нет

Я пытаюсь обновить 15-летний многомодульный проект Maven до Java 11 и системы модулей, представленной в Java 9. Поскольку проект построен с использованием Maven, все зависимости довольно ясны. Во-первых, я хочу сделать это, используя автоматические имена модулей, чтобы также не вводить обновленные артефакты (если это не обязательно).

Eclipse очень помогает в этом процессе, автоматически заполняя автоматические имена модулей в файле module-info.java. Например:

requires dom4j;

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

module-info.java:[29,18] module not found: dom4j

Я использую подключаемый модуль компилятора Maven 3.7.0 (3.8.0 дает исключение NullPointerException согласно https://jira.apache.org/jira/browse/MCOMPILER-355) Я подозреваю, что Maven настраивает jar-файлы в пути к классам, а не в пути к модулям, но выходные данные отладки плагина компилятора не регистрируют это.

Как я могу заставить Maven правильно обрабатывать эти модули?


person tbeernot    schedule 20.03.2019    source источник
comment
Сначала вы определили требуемый модуль, который не существует, как показано в выводе ошибки. Это означает, что вы должны использовать более позднюю версию с дескриптором модуля. Кроме того, указанный вопрос закрыт. Кроме того, без дополнительной информации невозможно помочь, в частности, вам следует использовать самую последнюю версию maven-compiler-plugin, а также обновить все плагины, которые вы используете, до самой последней версии, потому что было больше изменений, связанных с поддержкой модулей. и т.д. Также было бы полезно иметь ваши полные файлы pom и файл module-info.java....   -  person khmarbaise    schedule 20.03.2019
comment
Загрузка и ручная компиляция maven-compiler-plugin.3.8.1-SNAPSHOT (и ее использование) приводит к заметным ошибкам в модулях, поэтому как 3.7.0, так и 3.8.0, по-видимому, не способны обрабатывать эту структуру проекта. Продолжение следует.   -  person tbeernot    schedule 20.03.2019
comment
К сожалению, бесполезно говорить, что версия SNAPSHOT делает ее другой. Было бы полезно иметь пример проекта, который показывает проблему и позволяет воспроизвести проблему. Кроме того, если вы считаете, что это действительно ошибка, сообщите об этом с соответствующей информацией. Не зная структуры вашего проекта ничем помочь не возможно...   -  person khmarbaise    schedule 20.03.2019
comment
Это проект 15-летней давности, всю структуру не перечислишь, народ напугаешь. Суть проблемы в том, что maven-compiler-plugin 3.7.0 видимо не ставит (все) автоматические именованные модули в modulepath, а 3.8.0 имеет NullPointerException. Да, проблема с NPE закрыта, отсюда и использование 3.8.1 (SNAPSHOT, так как она еще не выпущена). Так что, если кто-то столкнется с проблемой, он будет знать, что делать.   -  person tbeernot    schedule 20.03.2019
comment
Извините, но это не помогает. имена автоматических модулей указаны неправильно... вам нужно использовать MANIFEST.MF (запись Automatic-Module-Name) без информации, которая не может помочь...   -  person khmarbaise    schedule 20.03.2019
comment
Я не в состоянии изменить manifest.mf всех используемых сторонних артефактов. Они загружаются из Maven Central. Модули в самом проекте, конечно же, модульные.   -  person tbeernot    schedule 20.03.2019


Ответы (1)


Я столкнулся с той же проблемой. Добавление

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>
    </plugins>
</build>

чтобы мой пом решил проблему для меня...

person Timon    schedule 01.07.2019
comment
Да, это еще не было выпущено в то время, когда я сделал пост. 3.8.1-SNAPSHOT действительно работал - person tbeernot; 01.07.2019