как красный) для меня.

аюсь познакомиться с модулями 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, что я хочу исправить мой модуль?

Ответы на вопрос(0)

Ваш ответ на вопрос