Eclipse如何知道com.sun是受限API?

3

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

我想要重用Eclipse和其他Java编译器用于警告受限API的机制。这些信息是存储在JRE中还是硬编码到Eclipse中的?


1
我不熟悉那个特定的例子。它可能是硬编码的。但请注意,Java提供了注释,如@Deprecated,可以轻松地进行分析,例如使用Java的反射API - Zabuzard
1个回答

5
这些信息存储在Eclipse内部的所谓执行环境档案中。 由于这些档案最初是OSGi的一部分(请参阅Bundle-RequiredExecutionEnvironment),因此,这些档案存储在*.profile文件中,它们位于org.eclipse.osgi插件/捆绑包中,并且每个文件都包含可访问软件包(org.osgi.framework.system.packages)的白名单,例如对于JavaSE-1.8
如果您创建了一个新的Java项目,则可以选择以下选项之一:
  • 执行环境JRE,它会为导入的sun.*包等引发访问限制错误;或者
  • 特定的JRE而没有任何访问限制到JRE套件
项目创建后,可以在项目 > 属性:Java构建路径中的选项卡中选择JRE,然后单击编辑...来更改所选的JRE。
此外,自Java 9引入了Java平台模块系统以来,JRE本身会限制对某些软件包的访问(而不是文件rt.jar,现在是modules文件)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接