允许 Eclipse 识别标准库 JDK11 补丁模块

Allow Eclipse to recognize standard library JDK11 patched module

出于好奇,我正在尝试设置 Eclipse 以允许它编译 运行 一个带有标准库 class 的应用程序正在修补。

我有 2 个 Java 项目 patchconsumer:一个包含字符串补丁 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):

所以我的问题是:

我知道我需要使用 Build Path -> Module Path -> Edit Is Modular -> Details Tab -> Patched module 但我不知道如何配置这两个项目。

一些您可能会觉得有用的信息:

感谢您的回复。

您正在使用不适合的 --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.

在您的场景中,您没有修补现有方法,而是添加了一个 其他方法,该方法破坏了系统库的 APIEclipse 只支持打补丁而不破坏系统库的API。事实上 javac 没有显示任何错误(可能是由于缺少检查 API 是否不会被破坏)在我看来是一个错误。

如果您创建自己的 JRE,请将其添加到 Window > 首选项:Java > 已安装的 JRE 并确保在创建新的 Java 项目不是 select 执行环境 JRE,而是 特定的 JRE.