Доступ к 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 опции могут быть использованы, чтобы сделать их доступными во время выполнения, а также.