[英]How to make Eclipse RUN patched JRE modules on JDK9+ with the —patch-module java option
[英]cannot compile Java 9 module with --patch-module in IntelliJ IDEA 2017.2.1
我试图熟悉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.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;
}
为了编译我的模块,我使用Settings
=> Build,Execution,Deplyoment
=> Compiler
=> Shared build process VM options
在IntelliJ中指定了--patch-module
标志,如下所述 。
编译失败,因为编译器无法从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
进行修补。 这个抱怨没有意义,因为我通过在命令行级别手动输入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的构建过程我想修补模块?
最终使用以下配置的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 sro macOS 10.13.3
和以下屏幕截图中的项目的Java编译器设置: -
添加编译选项到补丁( 注意 - 我使用了最新版本的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并且构建成功完成(虽然我仍然在MyImmutableList
看到RegularImmutableList
为红色)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.