首页 > 解决方案 > Eclipse 如何知道 com.sun 是受限制的 API?

问题描述

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

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

标签: javaeclipseguava

解决方案


此信息存储在Eclipse 内部的所谓执行环境配置文件中。

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

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

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

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

此外,由于 Java 9 引入了Java 平台模块系统,JRE 本身限制了对某些包的访问(而不是文件,而是rt.jar文件modules)。


推荐阅读