Доступ к com.солнце.инструменты.и javac.util с Java 9
Я пытаюсь получить доступ к List
класс com.sun.tools.javac.util
. Это прекрасно работает с Java 8, но при переключении на Java 9 я получаю следующую ошибку: Package 'com.sun.tools.javac.util' is declared in module "jdk.compiler", which does not export it to the unnamed module"
.
Я пробовал добавлять requires jdk.compiler;
мой , но это не решило проблему.
1 ответов
в долгосрочной перспективе безопасный способ справиться с такой ситуацией-отойти от использования этих внутренних API JDK.
можно использовать jdk.compiler
API модуля в качестве замены com.sun.tools.javac
пакета.
определяет реализацию системный компилятор Java и его команду эквивалент строки,javac и, а также javah.
специально для com.sun.tools.javac.util.List
, почти все его не переопределенные, самоопределяющиеся методы могут быть получены из реализации на основе интерфейса java.util.List
.
руководство по миграциио удалены java.*
APIs государство это -
команда Java стремится к обратному совместимость. Если приложение работает в JDK 8, затем оно будет работать на JDK 9 до тех пор, пока оно использует API, которые поддерживаются и предназначены для внешнего использования.
среди них:
- стандарт JCP,
java.*
,javax.*
- JDK-специфические API, некоторые
com.sun.*
, несколькоjdk.*
поддерживаемые API могут быть удалены из JDK, но только с уведомлением. узнайте, использует ли ваш код устаревшие API, запустив инструмент статического анализа
jdeprscan
.
затем добавить к выделенному выше риску..
Время Компиляции
внутренние API, инкапсулированные в JDK 9, недоступны во время компиляции, но могут быть доступны во время компиляции через .
в вашем случае :
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
выполнить Время
во время выполнения, они остаются доступными, если они были в JDK 8, но в будущем, они станут недоступны, в этот момент --add-exports
или --add-opens
опции могут быть использованы, чтобы сделать их доступными во время выполнения, а также.