Как использовать jdk без jre в Java 11
Мы планируем перенести наш проект на Java 8 на использование Java 11. Но я заметил, что Java 11 не имеет JRE-папки.
В Java 9 и Java 10 изменяются структуры папок, т.е. java\jdk1.x
или java\jre1.x
, где x
- java 9 или 10.
Но в Java 11 я получаю только одну папку, то есть java\jdk-11
. Как мой клиент будет использовать мое приложение без jre?
Я понял, что Java 11 обеспечивает модульное использование нашего приложения, и использование jlink необходимо для создания нашей собственной программы для запуска приложения на клиенте.
Правильно ли я понимаю?
Ответы
Ответ 1
В течение 20 лет JDK поставлялся с JRE, который был всего лишь частью его функциональности, установленной в другом каталоге вашей системы.
Фактически, он поставляется с двумя идентичными JRE, один из которых установлен в каталоге установки JDK и один за его пределами.
Это всегда озадачило меня, поскольку это полная трата усилий со стороны сопровождающих, чтобы это сделать, и полная потеря дискового пространства на компьютере, на котором вы его устанавливали, поскольку JRE просто дублирует некоторые вещи, которые JDK может делаю уже.
Наконец, с Java 11 Oracle и команда OpenJDK решили закончить эту глупость и просто распространить одну вещь - JDK. Этот JDK, когда он был установлен, на вашем жестком диске на самом деле меньше, чем прежний JRE, удалив даже несколько действительный аргумент, который вам нужен отдельной JRE для устройств с ограниченным дисковым пространством, аргумент, который никогда не объяснял, почему 2 JREs быть установленным с одним JDK в первую очередь, но был сделан, чтобы оправдать необходимость JRE в качестве срезанной среды выполнения для JDK.
Эрго, нет необходимости в отдельной JRE, и долгое время не было, не говоря уже о том, чтобы включить и принудительно установить его как часть установки JDK.
И нет, вам не нужно создавать свою собственную JRE. Просто установите OpenJDK на клиентских машинах и убедитесь, что вы добавили $ JAVA_HOME/bin к системному пути, как и ваши старые JRE.
И о, разделите дерево каталогов Windows на любые файлы java *.exe, некоторые из которых были установлены старым установщиком JRE, а также системный путь, в котором также были некоторые странные записи, добавленные некоторыми установщиками JRE.
Ответ 2
ТЛ; др
Как мой клиент будет использовать мое приложение без jre?
Implementation Объедините реализацию Java в приложении на основе Java.
Узнайте о:
Подробнее
Я понял, что Java 11 обеспечивает модульность нашего приложения.
Нет, модульность, строго говоря, не требуется. Большинство существующих приложений могут работать как есть в Java 11. Вы можете продолжить разработку в Java 11 без модуляции кода. Но в вашем случае для настольного или мобильного приложения с графическим интерфейсом вам необходимо упаковать JVM в ваше приложение. Модуляризация и использование инструментов Jlink, вероятно, лучший способ сделать это. В отличие от этого, серверное приложение на основе сервлетов или сервер микросервисов еще не нуждаются в модульности, хотя, вероятно, это хорошая идея в конечном итоге.
Я заметил, что в Java 11 нет папки JRE.
Oracle больше не предполагает, что конечные пользователи будут устанавливать JRE или JDK. Java-апплеты в браузере и Java Web Start доставка приложений постепенно прекращается, и конечному пользователю не требуется JRE. Ожидается, что приложения на основе Java будут включать собственную реализацию Java. Единственными, кто сознательно устанавливает JDK, будут разработчики и разработчики. системные администраторы на стороне сервера.
Некоторые люди разочарованы, увидев прохождение мечты Java Everywhere. И их может раздражать необходимость создавать сборку своего приложения для каждой хост-ОС (macOS, Linux, Windows и т.д.). С другой стороны, некоторые разработчики рады объединить реализацию Java (теперь меньше, чем когда-либо) со своим приложением, поскольку это избавляет конечного пользователя от необходимости загружать, устанавливать и обновлять общесистемную реализацию Java. Также устраняет необходимость борьбы с корпоративными ИТ-отделами для установки Java на ПК пользователей. А связывание Java с приложением упрощает тестирование и поддержку, так как вы точно знаете, что такое версия и дистрибутив Java, и управляете им. Кстати, это связывание Java с приложением не совсем новое: оно много лет поддерживается Apple в macOS & iOS магазины приложений.
Важно:
Вот блок-схема, которая может помочь вам найти и принять решение среди различных поставщиков, предоставляющих реализацию Java 11.
Ответ 3
Посетите веб-сайт проекта AdoptOpenJDK, чтобы загрузить последние версии JRE и JDK https://github.com/AdoptOpenJDK/openjdk-jdk11
Я использовал их ночные сборки, чтобы обойти проблему отсутствия JRE в пакете JDK https://adoptopenjdk.net/releases.html?variant=openjdk11#x64_linux
Просто распакуйте JRE в папку JDK и все будет.