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

标签 java eclipse java-11 eclipse-2018-12

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

enter image description here

所以我的问题是:

  • 如何为项目配置 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/

相关文章:

Java 11 从 8 个并行流升级引发 ClassNotFoundException

Java不打印小数位

java - 我的 GroceryList 程序中没有输出

java.io.IOException : error=36, Java 中的文件名太长

java - JFXPanel setScene 使用 Java 11 卡住

java - 编译 fatal error : invalid flag: --release for jdk 11 on Jenkins?

java - 无法正确设置构造函数

java - EJB 方法中的事务传播

java - 在 Eclipse RCP 中显示 View 时传递参数

java - 如何将java项目导入到Eclipse中