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

2024-05-01

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

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

这是我的源文件MyImmutableList.java:

package com.google.common.collect;

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

它属于我的模块com.effjava.collect with 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 as 此处描述 https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000093430-JDK-jigsaw-issues-patch-module-specified-more-than-once-for.

编译失败,因为编译器找不到超类RegularImmutableList来自番石榴图书馆。

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

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

经过进一步调查,我注意到构建过程会发出与--patch-module旗帜说:

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

... 很多东西 ...

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

... 更多东西 ...

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

无论如何,构建过程抱怨 - 在构建模块时 - 有问题的模块不存在,因此无法通过修补--patch-module。这个抱怨没有意义,因为我通过输入以下内容成功编译并构建了我的模块javac and 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 的构建过程我想要修补我的模块?


好吧最终有以下内容IntelliJ 的配置(修复IDEA-169150版本) https://youtrack.jetbrains.com/issue/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

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

  • 覆盖每个模块的编译器参数
  • 选择模块
  • 添加编译选项到 patch (Note- 我使用了最新版本的罐子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 IntelliJ IDEA 2017.2.1 中使用 --patch-module 编译 Java 9 模块 的相关文章

随机推荐