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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在IntelliJ IDEA 2017.2.1中无法使用--patch-module编译Java 9模块相关的知识,希望对你有一定的参考价值。

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

我正在使用IntelliJ IDEA 2017.2.1使用Java HotSpot(TM)64位服务器VM构建#IC 172.3544.35(构建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;
}

为了编译我的模块,我使用--patch-module => Settings => Build,Execution,Deplyoment => Compiler作为Shared build process VM options在IntelliJ中指定了described here标志。

编译失败,因为编译器无法从guava库中找到超类RegularImmutableList

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

错误:java:module guava从com.effjava.collect和guava中读取包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的消息窗口中隐藏它们但我看不到它们。作为一种解决方法,我只是指定伪造的编译器标志,让构建过程崩溃,以便它在崩溃报告中发出警告。

无论如何,构建过程抱怨 - 在构建模块时 - 所讨论的模块不存在,因此无法通过--patch-module修补。这个抱怨没有意义,因为我通过在命令行级别手动输入javacjarcommands来成功编译和构建我的模块:

cd %PROJECTDIR%com.effjava.collectsrc
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(Fix version of 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

发布此选择Build> Build Project并且构建成功完成(尽管我仍然在RegularImmutableList中看到MyImmutableList为红色)。

enter image description here

以上是关于在IntelliJ IDEA 2017.2.1中无法使用--patch-module编译Java 9模块的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 17和Maven构建javaWeb项目

Ubuntu问题记录-解决Ubuntu16.04上WPS,intellij idea系列包括Android Studio无法使用fcitx的搜狗拼音的问题

idea springboot中整合jdbc连接MySQL中,Schemas中无mybatis怎么解决?

intellij idea 14.1.5 怎样设置中文

intellij idea 怎么在project里的src创建图片文件夹

intellij idea 14.1.5 怎么弄中文