Я пытался портировать настольное приложение Java 8 на Java 11. У меня есть общее представление о том, чем Java 9 и более поздние отличаются от Java 8. Например: поддержка модульности, JDK является модульной, нет отдельной JRE.
В целом, насколько я понимаю, процесс переноса на Java 11 состоит из следующих шагов:
- Узнайте, какие зависимости выходят из поддержки в Java 9 или новее. Для этого мы используем
jdeps -jdkinternals
инструмент, найденный в Java 8 jdk.
- Зависимости, найденные в
Step 1
, могут обрабатываться двумя способами:
a. Если пакет зависимостей все еще существует в Java 9 или новее, но только инкапсулирован, то используйте команду --add-exports, чтобы заставить JDK экспортировать эти пакеты.
b. Если пакет зависимостей был удален из Java, мне придется изменить код приложения, чтобы использовать заменяющий пакет. Инструмент jdeps
даст мне запасной пакет для использования.
- Как только проблема с неподдерживаемыми зависимостями была решена, мы используем
jdeps --list-deps
на всех jar-файлах (как сгенерированных нашей программой, так и используемых нашей программой), чтобы узнать о пакетах JDK для включения во время выполнения.
- Как только зависимости перечислены, мы предоставляем
jlink
Java 11 для построения среды выполнения для приложения.
Правильно ли я понимаю этот процесс? С какими сюрпризами я могу столкнуться?
UPDATE:
В комментариях ниже сказано, что пользовательская среда выполнения с использованием jlink может не потребоваться. Однако у нас были проблемы с использованием обычной среды выполнения Java 8. Размещение информации ниже для большего контекста.
Проект, который мы пытались портировать, это Arduino , и мы используем Mac OS для этого. Arduino использует Ant
для сборки. build.xml
здесь здесь . Сначала мы изменили JAVA_HOME так, чтобы он указывал на Java 11, и использовали ant dist для его компиляции. По какой-то причине приложение не компилируется на Java 11, пока вы не удалите ../ в конце строки 69 в build.xml. После этого приложение скомпилировало и предоставило исполняемый файл по пути, указанному в строке 512 build.xml. Но когда мы пытаемся запустить исполняемый файл, он выдает ошибку Java Runtime
not found.