Как устранить ошибку компиляции module-info.java в Jdk9/java-9
Я пытаюсь запустить приведенный ниже код, используя jdk-9, но столкнулся с проблемой при компиляции с помощью команды
команда
javac -d mods .\module-info.java com\nirav\modi\Test.java
ошибка
.\module-info.java:1: error: class, interface, or enum expected
module module1 { }
^
1 error
module-info.java
module module1 {
}
Test.java
package com.nirav.modi;
class Test {
public static void main(String args[]){
System.out.println("Hello Modular...");
}
}
структура пакета как ниже
module1\module-info.java
module1\com\nirav\modi\Test.java
Версия JDK
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+153)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+153, mixed mode)
3 ответа
Согласно списку Jigsaw Issues, имя модуля не может заканчиваться цифрой. Цель состоит в том, чтобы отговорить авторов от кодирования номеров версий в названиях модулей.
Согласно JDK-8160181 не запрещено использовать цифры в именах модулей, однако они не должны иметь отношения к управлению версиями.
Примеры:
- log4j - ОК
- java.compact3 - ОК
- guava19 - НЕ ОК - 19 относится к основной версии гуавы
- module1 - OK IF 1 означает не версию, а один из многих модулей в образце проекта (в реальных проектах следует использовать лучшее имя)
Поскольку Lint не может понять, что означает цифра, он по умолчанию сообщает цифры, и вы можете подавить их в файле модуля с помощью:
@SuppressWarnings("module") // 1 in module1 is module number, not version
module module1 {
...
}
Комментарий является необязательным, но объясняет, "почему" предупреждение было подавлено.
JSR 376 еще не окончательный, и есть несколько тем, которые еще обсуждаются. Последнее предложение по теме #VersionsInModuleNames находится здесь:
http://mail.openjdk.java.net/pipermail/jpms-spec-experts/2017-March/000659.html
Похоже, что вы компилируете с Jigsaw сборки не-Jigsaw здесь... вот ссылка, где они были Jigsaw
С этим компилятором те же самые сэмплы, которые у вас есть, прекрасно компилируются на моем ноутбуке.
Вот как выглядит Java -версия для проекта Jigsaw:
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+153-jigsaw-nightly-h6003-20170124)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+153-jigsaw-nightly-h6003-20170124, mixed mode)
РЕДАКТИРОВАТЬ Он работает как с Jigsaw, так и без Jigsaw. Я только что попробовал (сборка 149)
EDIT2 Итак, я пробовал с JDK-9 сборки 153 и вот что я получил:
javac -d mods module-info.java Modules.java
module-info.java:1: warning: [module] module name module1 should avoid terminal digits
module module1 {
^
1 warning
удалив "1" и выполнив ту же команду, скомпилированный ОК, и каталог модов был создан с обоими файлами классов, скомпилированными просто отлично.