Почему Java не смогла запустить класс-произошла ошибка при инициализации загрузочного слоя - модуль mods не найден
Я прошел через Java 9 jigsaw tutorial. Я изо всех сил пытался запустить класс, java бросает ниже error -
java --module-path mods -m mods/com.test/com.test.HelloWorld
Error occurred during initialization of boot layer
java.lang.module.FindException: Module mods not found
Команда Javac -
javac -d mods --module-source-path src $(find src -name '*.java')
Я использую mac, java версия -
$ java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
Я что-нибудь упустил?
3 ответов:
Удалить дополнительные моды из имени модуля -
java --module-path mods -m com.test/com.test.HelloWorld
Флаг
-mпринимает имя модуля и основной класс, который вы хотите запустить. Имя модуляcom.test, следовательно, команда для запуска класса должна быть:java --module-path mods -m com.test/com.test.HelloWorld
--module-path modsговоритjava, где искать, чтобы найтиcom.test.
При первой компиляции кода с использованием
javacкоманда as -javac -d mods --module-source-path src $(find src -name '*.java')То, что вы обеспечили с помощью
-d directory, было тем, что кЗадайте каталог назначения для файлов класса.
В вашем случае папка
mods, гдеЕсли класс является частью пакета, то javac помещает файл класса в подкаталог, который отражает имя пакета и создает каталоги как необходимый.
Следовательно, вы можете взглянуть на Моды каталог после выполнения команды
.classдля всех (*.java) будет существовать в соответствующей структуре каталогов по состоянию на имя их пакета.
Тогда
javaопция инструмента--module-path module pathили-p module path, указанная в следующей команде:Поиск каталогов из списка разделенных точкой с запятой (;) справочники. Каждый каталог - это каталог модулей.
Ваш каталог, в соответствии с которым находится
mods, предполагая, что вы должны были создать перейдя по ссылке начало работы.
Затем
--module modulename[/mainclass]или-m module[/mainclass]по вашей командеЗадает исходный модуль для разрешения и имя основного класса для выполнения, если он не указан модулем.
, которое в вашем случае является именем модуля
com.testи основным классомcom.test.HelloWorld.
Следовательно, полный правильный синтаксис команды должен быть: -
java --module-path mods -m com.test/com.test.HelloWorld ^ ^ ^ module directory module name main class
Comments