Java 9, Jigsaw и автоматические модули - PullRequest
0 голосов
/ 23 июня 2018

Java 9/10. Я больше недели борюсь с простым проектом.

enter image description here

Как вы можете видеть на картинке, я хочу использовать commons-collection как автоматический модуль (я пытался добавить его с помощью maven, но это не сработало).

Итак, у меня есть красный цвет, который мне нужен, чтобы поставить банку на путь модуля. Откуда IntelliJ берет этот путь модуля? Как я могу сказать IDE добавить общие коллекции в проект, чтобы
1. компилятор может найти его во время компиляции и
2. Maven может найти его во время сборки?

Кто-нибудь может помочь?

EDIT: Я попытался добавить его в диалоге структуры проекта в качестве зависимости модуля во всех видах различных комбинаций. Я буквально попробовал сотни вещей, переместил флягу в структуре, и я не могу найти достаточно простой документ, чтобы сказать мне, как сделать это. Я использовал параметры компилятора, чтобы добавить «--module-path automatic» (специфичные для модуля и общие параметры компиляции), чтобы заставить IDEA найти объект и позволить Java сделать из него автоматический модуль.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Intellij использует путь к модулю, если вы запускаете программу из модуля (intellij), содержащего module-info.java, в противном случае он будет использовать путь к классам.

Я попытался импортировать common4 в качестве модуля, похоже,работать на меня, но я должен был использовать другой аргумент «требует» по сравнению с вашим.Ваше 'require' - это 'commons.collections4', мое - 'org.apache.commons.collections4' (проверьте запись манифеста commons4 для выделенного Automatic-Module-Name и используйте его вместо этого).

commons4 module

Если в манифесте commons4 отсутствует Automatic-Module-Name (отсутствует в версии 4.1 и более ранних), Java может не обнаружить jar как модуль, если имя содержитцифры или недопустимые символы.Поэтому некоторые jav-файлы репозитория maven не будут работать, и Intelli не будет видеть эти jar-модули как модули.

enter image description here

Вы также можете проверить неверное имя файла, используяследующая команда:

jar --file=/path/to/jar --describe-module

Если команда не выполнена, вполне вероятно, что в jar нет записи Automatic-Module-Name и имя файла имеет неправильное имя.

ok

jar --file=C:\temp\jigsaw1-1.0.jar --describe-module

bad

jar --file=C:\temp\jigsaw1.0.jar --describe-module`

'jigsaw1.0: Неверное имя модуля:' 0 'не является Javaидентификатор '

Поэтому некоторые банки maven могут не обнаруживаться как модули, так как они имеют тенденцию выглядеть одинаково.

0 голосов
/ 23 июня 2018

Сначала необходимо добавить запись библиотеки, чтобы сделать ее доступной в Modules:

Шаг 1: Добавить библиотеку (Add -> Java -> jar file)

enter image description here

Шаг 2: Выберите модуль (не забудьте нажать «Применить»)

enter image description here

Послечто файл module-info.java будет успешно проверен:

enter image description here

...