java - Eclipse 如何知道 com.sun 是受限制的 API?
问题描述
我正在使用ClassPath.getAllClasses
fromGuava
在实现某个接口的运行时类中查找。当与rt.jar
它一起使用时,它会从类似的包中找到许多类sun.*
,我想将它们过滤掉。
我想重用 Eclipse 和其他 java 编译器使用的机制来警告受限 API。这些信息是驻留在 JRE 中还是硬编码到 Eclipse 中?
解决方案
此信息存储在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
)。
推荐阅读
- angular - Angular 9 和 Storybook:添加 @angular/localize/init polyfill
- ethereum - 如何将代币发送到 0x 地址 - 销毁代币?
- excel - VBA复制列的最后3个单元格
- reactjs - 在没有链接的组件功能中反应设置路由
- python - 循环遍历具有多个工作表的工作簿并在python中提取值
- vba - 无法使用 vba 从 ftp 获取文件
- windows - expo version 命令显示在这台机器上禁用的正在运行的脚本
- python - 生物信息学代码:我有这个代码,我希望输入是两个字符串:文本和模式,输出是一个数字
- sql - 原生查询,如果参数为 null 或为空,则使 WHERE 有条件
- c++ - 为什么野牛仍在使用 `int yylex(void)` 并且找不到 `int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param)`?