Ошибка компиляции module-info.java с плагином maven-compiler-plugin и автоматическими модулями

Я использую v3.7.0 плагина по мере необходимости и JDK 9.0.1. Я добавил два оператора requires, каждый из которых ссылается на банку в пути к классу (автоматический модуль). Модуль-info.java успешно компилируется в Eclipse после того, как я переместил банки в Modulepath. Однако Maven выдает мне ошибку компилятора о том, что один из них отсутствует (как ни странно, не первый, а всего одной строкой раньше). Я попытался проверить имя автоматического модуля, но получаю сообщение об ошибке только для этой банки. Что означает эта ошибка и как ее исправить, чтобы узнать правильное имя модуля?

Я заменил свое имя пользователя в выводе ниже. Рассматриваемый jar использует ServiceLoader, но не скомпилирован с Java 9.

computerName:Commander-java username$ jar --file=/Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --describe-module
Unable to derive module descriptor for: /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar
Provider class com.username.rcf.server.TestCmdChain not in module

computerName:Commander-java username$ java -p /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --list-modules
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class com.username.rcf.server.TestCmdChain not in module

Ответ в Как обрабатывать ключевые слова java в автоматически сгенерированных именах модулей в Java 9? имеет другую ошибку, связанную с использованием идентификатора Java в имени модуля. Автоматическое имя jar для моего модуля должно быть просто rcf, так как имя jar rcf-1.0.jar. Ошибка, которую я получаю, также отличается.


person GabeV    schedule 23.10.2017    source источник
comment
Возможный дубликат Как работать с ключевыми словами java в автоматически сгенерированных именах модулей в Java 9?... У вас есть артефакт rcf-1.0.jar?   -  person Naman    schedule 23.10.2017
comment
Да, я владею им. У меня нет никаких идентификаторов Java в имени. Это просто рф. Ошибка, по-видимому, связана с ServiceLoader, поскольку класс, упомянутый в ошибке, реализует интерфейс, который используется с ServiceLoader, но не уверен. Не могу понять.   -  person GabeV    schedule 23.10.2017
comment
Дублированное голосование отозвано. Похоже, что пакет реализации не находится в самом модуле.   -  person Naman    schedule 23.10.2017


Ответы (1)


При получении описания модуля содержимое любых META-INF/services файлов конфигурации сопоставляется с provides объявлениями.

Пакеты, проверенные на наличие служб, содержат файлы классов.

Кроме того, имя пакета для отдельных классов является производным от их полного имени. Из общих журналов com.username.rcf.server должно быть ожидаемое имя пакета для предоставляемой услуги, и оно должно превратиться в

provides x.y.z.TestCmdChainInterface with com.username.rcf.server.TestCmdChain

Похоже, в вашем модуле нет такого пакета com.username.rcf.server.

person Naman    schedule 23.10.2017