Java 9, Jigsaw и автоматические модули

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

введите здесь описание изображения

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

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

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

РЕДАКТИРОВАТЬ: Я попытался добавить его в диалог структуры проекта как зависимость модуля во всех видах различных комбинаций. Я буквально перепробовал сотни вещей, переместил банку в структуре и не могу найти достаточно простой документ, который бы объяснил мне, как это сделать. Я использовал параметры компилятора, чтобы добавить «--module-path automatic» (специфические для модуля и общие параметры компиляции), чтобы IDEA нашла нужную вещь и позволила Java сделать из нее автоматический модуль.


person WarWolfen    schedule 23.06.2018    source источник
comment
Что ж, --module-path automatic звучит неправильно, возможно, это было --module-path <path to your .jar file>. С другой стороны, указание зависимости в maven тоже должно было сработать, если бы вы могли уточнить, что не сработало, было бы хорошо.   -  person Naman    schedule 23.06.2018


Ответы (2)


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

Шаг 1. Добавьте библиотеку (Добавить -> Java -> файл jar)

введите здесь описание изображения

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

введите здесь описание изображения

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

введите здесь описание изображения

person ernest_k    schedule 23.06.2018
comment
Могу предложить OP для перекрестной проверки их версии intelliJ :) - person Naman; 23.06.2018
comment
Версия IDEA: 2018.1.5 - person WarWolfen; 23.06.2018

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

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

модуль commons4

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

введите здесь описание изображения

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

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

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

ok

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

плохой

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

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

Поэтому некоторые jar-файлы maven могут не распознаваться как модули, поскольку они имеют тенденцию выглядеть похожими.

person Gapmeister66    schedule 04.12.2018
comment
Звонок из Питера - приятный штрих. - person Aleksandr Erokhin; 22.04.2021