当前位置: 首页 > 知识库问答 >
问题:

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

空英达
2023-03-14

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

我有两个Java项目,一个包含字符串补丁类(使用一个新方法,与长度相同),另一个应该使用所述方法。设置如下:

- 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());
    }
}

编译了补丁后(从而在补丁/bin/java/lang/code>中获得了String.class),我知道我可以很容易地使用:

java --patch-module html" target="_blank">java.base=patchpjt/bin/  consumer/src/consumer/Main.java

要正确调用新添加的方法size(),将获得5的结果。

问题是,在Eclipse中,仍然无法识别方法size(错误是类型String的方法size()定义不足):

所以我的问题是:

  • 如何配置Eclipse以使项目消费者能够正确编译、运行和显示错误
  • 如何配置Eclipse以便在内容辅助上显示方法size()

我知道我需要使用构建路径-

您可能会发现有用的一些信息:

  • Eclipse2018-12 (4.10.0)构建ID:20181214-0600

谢谢你的回复。

共有1个答案

胡弘毅
2023-03-14

您使用的是不适用的补丁模块(JEP 261:模块系统):

--patch模块选项仅用于测试和调试。强烈反对在生产环境中使用它。

在您的场景中,您不会修补现有方法,而是添加一个额外的方法,该方法会破坏系统库的API。Eclipse只支持修补而不破坏系统库的API。在我看来,javac没有显示任何错误(可能是因为如果API没有被破坏,就没有检查)这一事实是一个bug。

如果您创建自己的JRE,请将其添加到窗口中

 类似资料:
  • 我有一个Terraform用来管理我的云资源的服务帐户,我们称之为。我需要给予它足够的访问权限来创建/删除/编辑其他服务帐户,但不能更改它自己或项目中不应该接触的其他SAs。 我试着在那里添加一个条件,但看起来‘服务帐户’不是可以在条件(?)中使用的资源类型之一。下面是绑定该角色的HCL片段(我使用Terraform的事实与此无关): 当我删除该条件时,一切正常,但的权限远远超过它所需的权限。它甚

  • 4.4.3 标准库模块 应用程序要导入的模块大多来自 Python 语言提供的标准库。Python 标准库实现了很多 常见功能(如操作系统功能、GUI 构建、网络与互联网编程等),对应用程序设计提供了强 大的支持。标准库并不是 Python 语言本身的一部分,而是由专业程序员预先编好并随语言 提供给用户使用的。Python 的标准安装都会自动安装标准库。 如果想了解随着 Python 安装的标准库

  • 这个模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。一个例子就是使用os.sep可以取代操作系统特定的路径分割符。 下面列出了一些在os模块中比较有用的部分。它们中的大多数都简单明了。 os.name字符串指示你正在使用的平台。比如对于Windows,它是'

  • sys模块包含系统对应的功能。我们已经学习了sys.argv列表,它包含命令行参数。 命令行参数 例14.1 使用sys.argv #!/usr/bin/python # Filename: cat.py importsys defreadfile(filename):     '''Print a file to the standard output.'''     f =file(filen

  • 问题内容: CSS标识符和的(完整)有效/允许的 字符集 字符是什么? 是否可以使用正则表达式进行验证?它与浏览器无关吗? 问题答案: 字符集无关紧要。允许的字符更重要。检查CSS规范。这里是相关的: 在CSS中,标识符(包括选择器中的元素名称,类和ID )只能包含字符和ISO 10646 及更高版本的字符,以及连字符()和下划线();它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包

  • 有关 Photoshop CC 20.0(2018 年 10 月版)中引入的编辑 > 内容识别填充选项的更多信息,请参阅内容识别填充。 内容识别修补 修补工具用于移去不需要的图像元素。修补工具的“内容识别”选项可合成附近的内容,以便与周围的内容无缝混合。 旧版:有关使用 Photoshop CS6 之前版本中的修补工具的信息,请参阅修补区域。 视频 | 利用内容识别修复照片 视频 | 利用内容识别