Как Eclipse узнает, что com.sun - это ограниченный API?
Я использую ClassPath.getAllClasses
от Guava
найти во время выполнения классы, которые реализуют определенный интерфейс. При использовании с rt.jar
он находит много классов из sun.*
и подобные пакеты, и я хотел бы отфильтровать их.
Я хочу повторно использовать механизм, используемый Eclipse и, возможно, другими java-компиляторами для предупреждения об ограниченном API. Эта информация находится в JRE или жестко закодирована в Eclipse?
1 ответ
Эта информация хранится в так называемых профилях сред выполнения в Eclipse.
Потому что эти профили изначально OSGi (см. Bundle-RequiredExecutionEnvironment
), профили хранятся в плагине org.eclipse.osgi в комплекте *.profile
файлы, каждый из которых содержит белый список доступных пакетов (org.osgi.framework.system.packages
), например, здесь для JavaSE-1.8
,
Если вы создаете новый проект Java, вы можете выбрать либо
- среда выполнения JRE, которая дает вам ошибки ограничения доступа для импорта, например:
sun.*
пакеты или - конкретная JRE без каких-либо ограничений доступа к пакетам JRE
После создания проекта выбранная JRE может быть изменена в Project> Properties: Java Build Path, на вкладке Libraries выберите JRE и нажмите Edit....
Кроме того, поскольку Java Platform Module System, представленная в Java 9, сама JRE ограничивает доступ к некоторым пакетам (и вместо файла rt.jar
есть файл modules
).