出于好奇,我正在尝试设置 Eclipse 以允许它编译和运行一个带有标准库类的应用程序。
我有 2 个 Java 项目 patch
和 consumer
:一个包含字符串补丁类(使用新方法 size()
,与 length()
相同),另一个应使用所述方法 size()
.设置如下:
- patch
- bin (contains class files)
- src
- java
- lang
- String.java
- consumer
- src
- consumer
- Main.java
- module-info.java
主要.java:
package consumer;
public class Main {
public static void main(String[] args) {
String s = new String("hello");
System.out.println(s.size());
}
}
编译后patch
(从而在 String.class
中得到 patch/bin/java/lang/
)我知道我可以很容易地使用:
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 > Preferences: Java > Installed JREs 并确保在创建新 Java 项目时不要选择 执行环境 JRE,而是您的特定 JRE。
关于java - 允许 Eclipse 识别标准库 JDK11 补丁模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54144203/