Запустите Java-код с jdk11, но используйте tools.jar из jdk8 - PullRequest
0 голосов
/ 31 января 2019

Программа скомпилирована с JDK8.Я хочу запустить код с JDK11 (без перекомпиляции кода с JDK11).

Проблема состоит в том, что программа использует классы из JDK8 tools.jar (классы, которые теперь находятся в модуле jdk.compiler в jdk11,tools.jar добавлен в путь к классам).В JDK11 есть не отдельная банка для инструментов, а вместо этого часть JDK11.Таким образом, есть столкновения классов (класс находится в JDK11, а также в tools.jar, который находится в classpath).Классы из JDK11 имеют приоритет перед классами из tools.jar.Есть ли возможность сообщить JVM, что она должна использовать классы из tools.jar вместо классов из JDK11.

Обновления Как я уже сказал, я не могу перекомпилировать код с JDK11.Я знаю о модульной системе Java, представленной в Java9.Я спрашиваю, есть ли возможность сказать JVM игнорировать классы из модуля JDK11 jdk.compiler и вместо этого использовать классы, которые он нашел на пути к классам.

1 Ответ

0 голосов
/ 31 января 2019

Хотя я действительно не рекомендую делать это, то, что вы хотите, возможно с опцией --limit-modules:

java --limit-modules java.se <rest of arguments>

Это исключит все модули, кроме java.se иВы сможете использовать классы из tools.jar.

Опять же, это ужасный совет.Намного лучше сделать ваш код совместимым с новыми системными классами, а не использовать классы из JDK 8.

...