Создание образа среды выполнения Java на одной платформе для другой с помощью Jlink
Я создал образ среды выполнения с помощью jlink на моей машине Linux. И я вижу под include
папка. Означает ли это, что я могу использовать это время только для платформы Linux? Если да, существуют ли способы создания образов среды выполнения на одной платформе для другой (например, в Linux для Windows и наоборот)
2 ответов
The include
каталог предназначен для заголовочных файлов, таких как jni.h
, которые необходимы при компиляции кода C/C++, использующего JNI и другие интерфейсы. Это не имеет никакого отношения к jlink
.
The jlink
инструмент может создать образ времени выполнения для другой платформы (перекрестный таргетинг). Для этого вам нужно скачать два JDKs. Один для платформы, где вы бежите jlink
, другой для целевой платформы. Запустить jlink
С --module-path $TARGET/jmods
здесь $TARGET
- каталог, куда вы распаковали JDK для целевой платформы.
будучи вообще не в состоянии добавить что-либо к ответам Алана Бейтмана с точки зрения информации, я предложу рабочий пример. иллюстрирует использование jlink
на Mac OS, а затем запуск двоичного файла на Ubuntu в контейнере Docker.
основные моменты заключаются в следующем.
учитывая два простых модуля, мы компилируем на Mac OS:
javac -d build/modules \
--module-source-path src \
`find src -name "*.java"`
jar --create --file=lib/net.codetojoy.db@1.0.jar \
-C build/modules/net.codetojoy.db .
jar --create --file=lib/net.codetojoy.service@1.0.jar \
-C build/modules/net.codetojoy.service .
предполагая, что Linux 64 JDK распакован в локальном каталоге (заданном как командная строка арг), мы называем jlink
(на Mac OS в этом примере). JAVA_HOME
суть решения:
# is ./jdk9_linux_64/jdk-9.0.1
JAVA_HOME=
rm -rf serviceapp
jlink --module-path $JAVA_HOME/jmods:build/modules \
--add-modules net.codetojoy.service \
--output serviceapp
тогда, предполагая, что мы вытащили ubuntu
image for Docker, мы можем выполнить следующее в терминале Docker (т. е. Linux):
docker run --rm -v $(pwd):/data ubuntu /data/serviceapp/bin/java net.codetojoy.service.impl.UserServiceImpl
TRACER : hello from UserServiceImpl
для повторной итерации этой функции Java 9/jlink
: Linux не имеет Java установлен и двоичный файл Linux был построен на Mac OS.