猿问

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

只是出于好奇,我正在尝试设置 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

感谢您的回复。



胡子哥哥
浏览 128回答 1
1回答

慕田峪9158850

您正在使用--patch-module它不打算用于(JEP 261:模块系统):--patch-module 选项仅用于测试和调试。强烈建议不要在生产环境中使用它。在您的场景中,您不会修补现有方法,而是添加一个破坏系统库 API 的附加方法。Eclipse 只支持打补丁而不破坏系统库的 API。在我看来,没有显示任何错误的事实javac(可能是由于缺少检查 API 不会被破坏)是一个错误。如果您创建自己的 JRE,请将其添加到Window > Preferences: Java > Installed JREs中,并确保在创建新 Java 项目时不要选择执行环境 JRE,而是选择您的特定 JRE。
随时随地看视频慕课网APP

相关分类

Java
我要回答