Как устранить ошибку компиляции 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" и выполнив ту же команду, скомпилированный ОК, и каталог модов был создан с обоими файлами классов, скомпилированными просто отлично.

Другие вопросы по тегам