允许 Eclipse 识别标准库 JDK11 补丁模块
Allow Eclipse to recognize standard library JDK11 patched module
出于好奇,我正在尝试设置 Eclipse 以允许它编译 运行 一个带有标准库 class 的应用程序正在修补。
我有 2 个 Java 项目 patch
和 consumer
:一个包含字符串补丁 class(使用新方法 size()
,与 length()
) 和另一个应该使用所述方法 size()
。设置如下:
- patch
- bin (contains class files)
- src
- java
- lang
- String.java
- consumer
- src
- consumer
- Main.java
- module-info.java
Main.java:
package consumer;
public class Main {
public static void main(String[] args) {
String s = new String("hello");
System.out.println(s.size());
}
}
编译 patch
后(从而在 patch/bin/java/lang/
中得到 String.class
)我知道我可以很容易地使用:
java --patch-module java.base=patchpjt/bin/ consumer/src/consumer/Main.java
正确调用新添加的方法size()
,得到5
的结果。
问题是在 Eclipse 中方法 size
仍然无法识别(错误是 Method Size() is underfined for type String):
所以我的问题是:
- 如何配置 Eclipse 以使项目
consumer
正确编译,运行 并且不显示错误?
- 如何配置 Eclipse 以便在 Content Assist 上显示方法
size()
?
我知道我需要使用 Build Path -> Module Path -> Edit Is Modular -> Details Tab -> Patched module
但我不知道如何配置这两个项目。
一些您可能会觉得有用的信息:
- Eclipse 2018-12 (4.10.0) 内部版本号:20181214-0600
感谢您的回复。
您正在使用不适合的 --patch-module
(JEP 261: Module System):
The --patch-module option is intended only for testing and debugging.
Its use in production settings is strongly discouraged.
在您的场景中,您没有修补现有方法,而是添加了一个 其他方法,该方法破坏了系统库的 API。 Eclipse 只支持打补丁而不破坏系统库的API。事实上 javac
没有显示任何错误(可能是由于缺少检查 API 是否不会被破坏)在我看来是一个错误。
如果您创建自己的 JRE,请将其添加到 Window > 首选项:Java > 已安装的 JRE 并确保在创建新的 Java 项目不是 select 执行环境 JRE,而是 特定的 JRE.
出于好奇,我正在尝试设置 Eclipse 以允许它编译 运行 一个带有标准库 class 的应用程序正在修补。
我有 2 个 Java 项目 patch
和 consumer
:一个包含字符串补丁 class(使用新方法 size()
,与 length()
) 和另一个应该使用所述方法 size()
。设置如下:
- patch
- bin (contains class files)
- src
- java
- lang
- String.java
- consumer
- src
- consumer
- Main.java
- module-info.java
Main.java:
package consumer;
public class Main {
public static void main(String[] args) {
String s = new String("hello");
System.out.println(s.size());
}
}
编译 patch
后(从而在 patch/bin/java/lang/
中得到 String.class
)我知道我可以很容易地使用:
java --patch-module java.base=patchpjt/bin/ consumer/src/consumer/Main.java
正确调用新添加的方法size()
,得到5
的结果。
问题是在 Eclipse 中方法 size
仍然无法识别(错误是 Method Size() is underfined for type String):
所以我的问题是:
- 如何配置 Eclipse 以使项目
consumer
正确编译,运行 并且不显示错误? - 如何配置 Eclipse 以便在 Content Assist 上显示方法
size()
?
我知道我需要使用 Build Path -> Module Path -> Edit Is Modular -> Details Tab -> Patched module
但我不知道如何配置这两个项目。
一些您可能会觉得有用的信息:
- Eclipse 2018-12 (4.10.0) 内部版本号:20181214-0600
感谢您的回复。
您正在使用不适合的 --patch-module
(JEP 261: Module System):
The --patch-module option is intended only for testing and debugging. Its use in production settings is strongly discouraged.
在您的场景中,您没有修补现有方法,而是添加了一个 其他方法,该方法破坏了系统库的 API。 Eclipse 只支持打补丁而不破坏系统库的API。事实上 javac
没有显示任何错误(可能是由于缺少检查 API 是否不会被破坏)在我看来是一个错误。
如果您创建自己的 JRE,请将其添加到 Window > 首选项:Java > 已安装的 JRE 并确保在创建新的 Java 项目不是 select 执行环境 JRE,而是 特定的 JRE.