无法在 IntelliJ IDEA 2017.2.1 中使用 --patch-module 编译 Java 9 模块

我试图熟悉Java 9模块以及如何在IntelliJ中定义它们。除此之外,我想使用编译器/ JVM标志解决拆分包问题,但我不知道如何使其在IntelliJ中工作。--patch-module

我正在使用IntelliJ IDEA 2017.2.1 Build #IC 172.3544.35和Java HotSpot(TM)64位服务器VM(build 9 + 180,混合模式)。

这是我的源文件:MyImmutableList.java

package com.google.common.collect;

public class MyImmutableList extends RegularImmutableList {
  public MyImmutableList(Object[] array) {
    super(array);     
  }
}

它属于我的模块,带有:com.effjava.collectmodule-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;
}

为了编译我的模块,我在IntelliJ中使用=> => = >指定了标志,如此处所述--patch-moduleSettingsBuild,Execution,DeplyomentCompilerShared build process VM options

编译失败,因为编译器无法从番石榴库中找到超类。RegularImmutableList

IntelliJ提供的建议是将番石榴库的指令添加到模块描述符中,这当然不起作用,因为编译器随后正确地抱怨了拆分包问题:requires

错误:java:模块番石榴从com.effjava.collect和番石榴读取包com.google.common.collect

在进一步调查中,我注意到构建过程会发出与标志相关的警告,指出:--patch-module

错误:异常构建进程终止: “C:\Program Files\Java\jdk-9\bin\java” -Xmx700m -Djava.awt.headless=true

...很多东西...

警告:未知模块:com.effjava.collect 指定给 --patch-module

...更多的东西...

顺便说一句,我不知道如何掌握编译器警告。我没有将它们隐藏在IntelliJ的消息窗口中,但我看不到它们。作为一种解决方法,我只是指定了伪造的编译器标志,并让构建过程崩溃,以便它在其崩溃报告中发出警告。

无论如何,构建过程在构建模块时抱怨有问题的模块不存在,因此无法通过 进行修补。这个抱怨没有意义,因为我确实通过在命令行级别手动键入and命令来成功编译和构建我的模块:--patch-modulejavacjar

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 的构建过程,我想要修补我的模块?


答案 1

好吧,最终使用IntelliJ的以下配置(IDEA-169150的修复版本) -

IntelliJ IDEA 2018.1 (Community Edition)
Build #IC-181.4203.550, built on March 27, 2018
JRE: 1.8.0_152-release-1136-b20 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.3

和项目的 Java 编译器设置,如以下屏幕截图所示:-

Java compiler configuration

  • 覆盖每个模块的编译器参数
  • 选择模块
  • 添加编译选项以进行修补(注意 - 我使用了最新版本的jar)

    --patch-module com.effjava.collect=/Users/naman.nigam/.m2/repository/com/google/guava/guava/24.1-jre/guava-24.1-jre.jar
    

发布此选择“生成>生成项目”,生成成功完成(尽管我仍然看到红色)。RegularImmutableListMyImmutableList

enter image description here


答案 2

推荐