Как добавить несколько банок в путь к модулю?

У меня следующая ситуация:

Адрес модуля:

module org.abondar.experimental.address {
    exports org.abondar.experimental.address;
}

Модуль Человек:

module org.abondar.experimental.person {
    requires org.abondar.experimental.address;
    exports org.abondar.experimental.person;
}

Я создаю их с помощью Maven, поэтому у каждого модуля есть собственный целевой каталог с файлом jar.

Я пытаюсь запустить модуль Person с таким основным классом

java --module-path Address/target/Address-1.0.jar;Person/target/Person-1.0.jar -m org.abondar.experimental.person/org.abondar.experimental.person.Main

Но мне отказывают в разрешении. Как мне настроить путь к модулю, включая несколько модулей?


person Alex Bondar    schedule 20.12.2017    source источник
comment
Пожалуйста, покажите весь текст сообщения об ошибке, которое вы получаете (или всю трассировку стека, если вы получаете исключение).   -  person VGR    schedule 21.12.2017
comment
Также было бы неплохо увидеть ваш pom.xml   -  person Kirill Simonov    schedule 21.12.2017


Ответы (1)


Что ж, попробовав это в одном из моих проектов с MacOS, я почти получил что-то похожее на это -

zsh: permission denied: .../.m2/repository/test/test/1.0.0-SNAPSHOT/test-1.0.0-SNAPSHOT.jar
zsh: permission denied: .../.m2/repository/org/slf4j/slf4j-log4j12/1.7.12/slf4j-log4j12-1.7.12.jar
zsh: permission denied: .../.m2/repository/org/slf4j/slf4j-api/1.7.12/slf4j-api-1.7.12.jar

Причина этой ошибки в том, что пути к JAR-файлам указаны как команда для выполнения в MacOS.

Если вы рассматриваете путь к модулю как список каталогов для MacOS (в целом это может быть Unix), он не соответствует java документация по инструменту. Вместо этого вы могли бы искать

java --help

в котором говорится

--module-path <module path> ... : разделенный список каталогов, каждый каталог является каталогом модулей.

и в этом случае команда, которая будет работать для вас, будет:

java --module-path Address/target/Address-1.0.jar:Person/target/Person-1.0.jar -m org.abondar.experimental.person/org.abondar.experimental.person.Main
person Naman    schedule 21.12.2017
comment
Мне интересно знать, откуда исходит отказ в разрешении. Это скрипт, а не java? В пути к модулю java --help не хватает места в выводе, чтобы показать все детали. Вместо этого см. JEP 261, где вы увидите, что записи в пути к модулю могут быть модулями или каталогами модулей. - person Alan Bateman; 21.12.2017
comment
@AlanBateman Сначала мне тоже кажется, что вывод --help не полностью содержится в выводе, и вместе с этим происходит отказ в этом разрешении. Изучил бы это дальше, чтобы узнать, что именно вызывает отказ в разрешении (по крайней мере, для меня). - person Naman; 21.12.2017
comment
@AlanBateman Под одним из моих проектов с MacOS я имел в виду, что выполнил аналогичную команду с раздельным путем ;, и именно здесь я получил указанное выше: общая ошибка. Путь в моей командной строке содержал эти каталоги .m2/repository. Также, чтобы добавить к деталям, я получаю аналогичную ошибку, когда пытаюсь сделать что-то простое, например ../.m2/repository/test/test/1.0.0-SNAPSHOT/test-1.0.0-SNAPSHOT.jar (да, кроме этой команды нет). возможно, за это отвечает оболочка. Остался немного озадачен сам. - person Naman; 21.12.2017
comment
; используется для разделения команд в OS X (и других системах Unix/Linux). Поэтому я подозреваю, что вы используете путь к файлу JAR в качестве команды, что объясняет ошибку отказа в разрешении. - person Alan Bateman; 27.12.2017
comment
@AlanBateman Ну, действительно, я в конечном итоге указываю путь как команду, и это тоже объясняет ошибку. Спасибо :) - person Naman; 27.12.2017