【发布时间】:2019-06-06 05:44:03
【问题描述】:
出于好奇,我正在尝试设置 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
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
感谢您的友好回复。
【问题讨论】:
-
您是如何设置包含补丁的 Eclipse 项目的?它仅在尝试通过创建一个非模块化项目来修补非 jdk 模块时才对我有用,该项目依赖于我要在类路径上定义的模块,而不是在模块路径上。然而,对于 JRE,Eclipse 不允许我将它添加到类路径中......好吧.. 它允许它,但后来不知何故决定将它自己再次移动到模块路径中。因此,我总是得到“包 java.lang 与可从另一个模块访问的包冲突:java.base”。有什么提示吗?
标签: java eclipse java-11 eclipse-2018-12