как красный) для меня.
аюсь познакомиться с модулями Java 9 и узнать, как их определить в IntelliJ. Помимо прочего, я хочу решить проблему разделения пакета, используя--patch-module
флаг компилятора / JVM, и я не знаю, как заставить его работать в IntelliJ.
Я использую IntelliJ IDEA 2017.2.1 Build #IC 172.3544.35 с 64-разрядной серверной виртуальной машиной Java HotSpot (TM) (сборка 9 + 180, смешанный режим).
Это мой исходный файлMyImmutableList.java
:
package com.google.common.collect;
public class MyImmutableList extends RegularImmutableList {
public MyImmutableList(Object[] array) {
super(array);
}
}
Принадлежит моему модулюcom.effjava.collect
с участиемmodule-info.java
:
module com.effjava.collect {
// do not require module guava; instead patch this module with guava.19-0.jar via:
// javac --patch-module com.effjava.collect=guava-19.0.jar module-info.java com/google/common/collect/MyImmutableList.java
// requires guava;
exports com.google.common.collect;
}
Для компиляции моих модулей я указал--patch-module
флаг в IntelliJ с помощьюSettings
=>Build,Execution,Deplyoment
=>Compiler
=>Shared build process VM options
какописано здесь.
Компиляция не удалась, потому что компилятор не может найти суперклассRegularImmutableList
из библиотеки гуавы.
Совет от IntelliJ - добавитьrequires
директива для библиотеки guava для дескриптора модуля, которая, конечно, не работает, потому что компилятор справедливо жалуется на проблему с расщепленным пакетом:
Ошибка: java: модуль guava читает пакет com.google.common.collect из com.effjava.collect и guava
При дальнейшем расследовании я заметил, что процесс сборки выдает предупреждение, связанное с--patch-module
флаг, говорящий:
Ошибка: аварийное завершение процесса сборки: "C: \ Program Files \ Java \ jdk-9 \ bin \ java" -Xmx700m -Djava.awt.headless = true
... много вещей ...
ВНИМАНИЕ: Неизвестный модуль: com.effjava.collect указан для --patch-module
... больше вещей ...
Кстати, я не знал, как получить предупреждения компилятора. Я не прячу их в окне сообщений IntelliJ и все же не вижу их. В качестве обходного пути я просто указал фиктивные флаги компилятора и позволил аварийному завершению процесса сборки, чтобы он выдавал WARNING в своем отчете о сбое.
В любом случае, процесс сборки жалуется - при сборке модуля - что рассматриваемый модуль не существует и по этой причине не может быть исправлен через--patch-module
, Эта жалоба не имеет смысла, потому что я успешно скомпилировал и собрал свой модуль, набрав вjavac
а такжеjar
Команды вручную на уровне командной строки:
cd %PROJECTDIR%\com.effjava.collect\src
javac --patch-module com.effjava.collect=../../guava/guava-19.0.jar -d ../../out/production/com.effjava.collect module-info.java com/google/common/collect/MyImmutableList.java
jar --create --file=../../out/artifacts/com_effjava_collect_jar/com.effjava.collect.jar -C ../../out/production/com.effjava.collect .
Как я могу сообщить процессу сборки IntelliJ, что я хочу исправить мой модуль?