Создать jre из OpenJDK Windows

Мы переходим от Oracle JDK/JRE к OpenJDK. Теперь я нашел только JDK, но я хочу иметь JRE и OpenJDK. Это делается для установки нашего приложения на клиентах без необходимости полного JDK.

Есть ли способ создать пакет JRE из OpenJDK для Windows X64?

Ответ 1

Вдохновленный статьей Использование jlink для сборки сред выполнения Java для немодульных приложений Я использовал команды:

  1. java --list-modules, чтобы получить список всех доступных модулей openjdk
  2. jlink --no-header-files --no-man-pages --compress=2 --add-modules <module-list from step 1> --output java-runtime для создания компактной jre.

Для OpendJDK 12 это команда, с которой я закончил:

jlink --no-header-files --no-man-pages --compress=2 --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml,java.xml.crypto,jdk.accessibility,jdk.aot,jdk.attach,jdk.charsets,jdk.compiler,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,jdk.dynalink,jdk.editpad,jdk.hotspot.agent,jdk.httpserver,jdk.internal.ed,jdk.internal.jvmstat,jdk.internal.le,jdk.internal.opt,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.jartool,jdk.javadoc,jdk.jcmd,jdk.jconsole,jdk.jdeps,jdk.jdi,jdk.jdwp.agent,jdk.jfr,jdk.jlink,jdk.jshell,jdk.jsobject,jdk.jstatd,jdk.localedata,jdk.management,jdk.management.agent,jdk.management.jfr,jdk.naming.dns,jdk.naming.rmi,jdk.net,jdk.pack,jdk.rmic,jdk.scripting.nashorn,jdk.scripting.nashorn.shell,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,jdk.zipfs --output java-runtime

Ответ 3

Как уже упоминалось, больше нет отдельной JRE, распространяемой вместе с JDK, начиная с Java 9. Вам нужно будет использовать jlink и указать модули, от которых зависит ваш код, для создания пользовательского jre.

Поскольку это может быть хлопотно, я создал веб-инструмент, упрощающий создание пользовательской JRE из реализации OpenJDK (например, Oracle HotSpot, Eclipse OpenJ9 или Amazon Corretto) с использованием jlink. Инструмент даст вам правильную команду jlink для запуска в зависимости от ваших потребностей.

Я также включил способ сделать стандартную Java SE JRE для тех, кто просто хочет базовую облегченную (~ 40-60 МБ) JRE. Если вы знаете, как использовать терминал, вам потребуется менее 2 минут, чтобы создать JRE общего назначения для JDK 9 и выше.

Попробуйте здесь - EasyJRE: https://justinmahar.github.io/easyjre/

Ответ 4

Я использую openjdk 11 вместо jre8, так как oracle объявил об изменении лицензии. Мои клиенты были недовольны их изменением соглашения.

Чтобы заставить его работать, мне нужно было только переименовать папку sdk в jre.

Одной из проблем у меня была внешняя библиотека dll. где open jdk жаловался, что больше не может найти путь к классу. Чтобы это исправить, я просто скопировал dll в папку system32.

Надеюсь это поможет

Стюарт

Ответ 5

Согласно документу Building OpenJDK 1:

Windows XP не поддерживается платформой, но все новые Windows должны иметь возможность создавать OpenJDK.

Далее объясняется, что Cygwin должен выполнять сборку, требования к собственным компиляторам и библиотекам, а также проблему "начальной загрузки" JDK, которая требуется для компиляции классов Java в исходном дереве.

Но очевидным следствием является то, что вы можете создавать OpenJDK в Windows и Windows... хотя конечный результат не поддерживается Oracle или проектом OpenJDK.

Обратите внимание, что в документе сборки описаны цели создания для JRE и JDK "изображений". Я думаю, что это говорит о том, что это двоичные деревья, которые можно скопировать в целевую систему и использовать. Вы можете создавать ZIP файлы из них...


1 - Эта ссылка предназначена для версии документа Java 9.Для других вы должны найти соответствующий документ "building.html" в том же месте в исходном дереве.

Ответ 6

Начиная с Java 9, вы можете использовать jlink для создания настраиваемой среды выполнения для вашего приложения, используя только те модули, которые вам действительно нужны для запуска, что обычно даже меньше, чем традиционная JRE.

Ответ 7

Так что я собираюсь опубликовать что-то немного проще, чем то, что было опубликовано SteinarH. Я не хотел составлять этот список сам, так что... это делает это для вас. Кроме того, из-за того, что я был немного более кратким, я бы не назвал его java-runtime а вместо этого jre-11 (или любой другой версией, которую вы используете).

jlink --no-header-files --no-man-pages --compress=2 --add-modules $($(java --list-modules) -join "," -replace "@[0-9]*") --output jre-11

Ответ 8

Насколько я знаю, единственным местом, где вы можете скачать OpenJDK для Windows, является сайт Azul. Тем не менее, они, похоже, предоставляют полный JDK, поэтому, если вы хотите только JRE, вам нужно построить его самостоятельно, как предложил Стивен С.

Ответ 9

На этом сайте вы можете получить JDK и JRE (JDK содержит JRE) https://adoptopenjdk.net/upstream.html.

Но если вам нужно собрать jre, вы можете использовать следующий код в python (я взял ответ от @SteinarH), код предполагает, что вы находитесь в jdk bin и что на предыдущем уровне нет каталога с именем jre.

import os
jmod_str =  os.popen('java --list-modules').read()
init = jmod_str.index('@')
end = jmod_str.index('\n')
version = jmod_str[init:end]
jmod_list = jmod_str.replace(version, '').replace('\n', ',') 
jmod_list = jmod_list[:-1] if jmod_list[-1] == ',' else jmod_list
cmd = 'jlink --no-header-files --no-man-pages --compress=2 --module-path ..\jmods --add-modules '+ jmod_list + ' --output ..\jre'