2

只是出于好奇,我正在尝试设置 Eclipse 以允许它编译和运行一个应用程序,其中一个标准库类被打了补丁。

我有 2 个 Java 项目patchconsumer一个包含一个字符串补丁类(具有一个新方法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.classpatch/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

感谢您的回复。

4

1 回答 1

1

您正在使用--patch-module它不打算用于(JEP 261:模块系统):

--patch-module 选项仅用于测试和调试。强烈建议不要在生产环境中使用它。

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

如果您创建自己的 JRE,请将其添加到Window > Preferences: Java > Installed JREs中,并确保在创建新 Java 项目时不要选择执行环境 JRE,而是选择您的特定 JRE

于 2019-01-11T13:16:25.907 回答