How does Eclipse know that com.sun is a restricted API?

这一生的挚爱 提交于 2020-01-10 05:15:05

问题


I'm using ClassPath.getAllClasses from Guava to find in runtime classes that implement a certain interface. When used with rt.jar it finds many classes from sun.* and similar packages and I'd like to filter them out.

I want to reuse the mechanism used by Eclipse and maybe other java compilers to warn about restricted API. Does this information reside JRE or hardcoded into Eclipse?


回答1:


This information is stored in so-called Execution Environments profiles inside of Eclipse.

Because these profiles are originally an OSGi thing (see Bundle-RequiredExecutionEnvironment), the profiles are stored in the org.eclipse.osgi plugin/bundle in *.profile files that each contains a whitelist of the accessible packages (org.osgi.framework.system.packages), e. g. here for JavaSE-1.8.

If you create a new Java project you can choose either

  • an execution environment JRE which gives you access restriction errors for imports of e. g. sun.* packages or
  • a specific JRE without any access restriction to JRE packages

After project creation the chosen JRE can be changed in Project > Properties: Java Build Path, tab Libraries by selecting the JRE and clicking Edit....

In addition, since the Java Platform Module System, introduced with Java 9, the JRE itself restricts access to some packages (and instead of the file rt.jar there is the file modules).



来源:https://stackoverflow.com/questions/52018579/how-does-eclipse-know-that-com-sun-is-a-restricted-api

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!