【问题标题】:How does Eclipse know that com.sun is a restricted API?Eclipse 如何知道 com.sun 是受限 API?
【发布时间】:2018-08-25 15:13:07
【问题描述】:

我正在使用来自GuavaClassPath.getAllClasses 在实现某个接口的运行时类中查找。当与rt.jar 一起使用时,它会从sun.* 和类似的包中找到许多类,我想将它们过滤掉。

我想重用 Eclipse 和其他 java 编译器使用的机制来警告受限 API。这些信息是驻留在 JRE 中还是硬编码到 Eclipse 中?

【问题讨论】:

  • 我不熟悉那个特定的例子。它可能是硬编码的。但请注意,Java 提供了诸如 @Deprecated 之类的注释,这些注释很容易分析,例如使用 Java 的 反射 API

标签: java eclipse guava


【解决方案1】:

此信息存储在 Eclipse 内部的所谓 Execution Environments 配置文件中

因为这些配置文件最初是 OSGi 的东西(参见 Bundle-RequiredExecutionEnvironment),所以配置文件存储在 org.eclipse.osgi 插件/捆绑包中的 *.profile 文件中,每个文件都包含可访问包的白名单 (org.osgi.framework.system.packages), e. G。这里是JavaSE-1.8

如果您创建一个新的 Java 项目,您可以选择其中一个

  • 一个 执行环境 JRE,它会为您提供导入 e 的 访问限制 错误。 G。 sun.* 包或
  • 一个没有任何访问限制的特定 JRE 对 JRE 包

创建项目后,可以在 Project > Properties: Java Build Path 选项卡 Libraries 中更改所选 JRE > 通过选择 JRE 并单击 Edit...

此外,由于 Java 9 引入了 Java Platform Module System,JRE 本身限制了对某些包的访问(而不是文件 rt.jar,而是文件 modules)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多