使用JLINK在另一个平台上创建Java运行时映像



我使用Linux计算机上的JLINK创建了运行时映像。我在include文件夹下看到linux文件夹。这是否意味着我只能在Linux平台上使用此运行时映像?如果是,是否有任何方法可以在一个平台上创建运行时图像的另一个平台(例如,在Windows的Linux上,反之亦然)

include目录用于标头文件,例如 jni.h,在编译使用JNI和其他本机接口的C/C 代码时需要。与jlink无关。

jlink工具可以为另一个平台创建运行时图像(交叉定位)。您需要下载两个JDK来做到这一点。一个用于您运行jlink的平台,另一个用于目标平台。使用--module-path $TARGET/jmods运行jlink,其中$TARGET是目标平台的JDK的目录。

通常无法在艾伦·贝特曼(Alan Bateman)的答案中添加任何东西,我将提供一个工作示例。此示例说明了在Mac OS上使用jlink,然后在Docker容器中的Ubuntu上运行二进制文件。

显着点如下。

给定两个简单的模块,我们在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是在本地目录中解开包装的(指定为命令行ARG),我们将调用jlink(在此示例中在Mac OS上)。 JAVA_HOME是解决方案的关键

# $1 is ./jdk9_linux_64/jdk-9.0.1
JAVA_HOME=$1 
rm -rf serviceapp 
jlink --module-path $JAVA_HOME/jmods:build/modules 
--add-modules net.codetojoy.service 
--output serviceapp

然后,假设我们已将Docker的ubuntu图像拉动,我们可以在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上构建的。

最新更新