Как использовать 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.

Flowchart diagram to aid in finding and choosing an implementation of Java 11 from various vendors.