Zim*_*ger 18 java jlink java-platform-module-system java-9 java-module
我在Linux机器上使用jlink创建了运行时映像.我linux在include文件夹下看到了文件夹.这是否意味着我只能将此运行时映像用于Linux平台?如果是,有没有办法在一个平台上为另一个平台创建运行时映像(例如在Linux for Windows上,反之亦然)
Ala*_*man 28
该include目录用于jni.h编译使用JNI和其他本机接口的C/C++代码时所需的头文件.这跟无关jlink.
该jlink工具可以为另一个平台创建运行时映像(交叉定位).您需要下载两个JDK才能执行此操作.一个用于运行的平台jlink,另一个用于目标平台.运行jlink在--module-path $TARGET/jmods哪里$TARGET是您为目标平台解压缩JDK的目录.
由于一般无法在Alan Bateman的信息方面添加任何内容,我将提供一个有效的例子.此示例说明jlink在Mac OS上使用,然后在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 .
Run Code Online (Sandbox Code Playgroud)
假设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
Run Code Online (Sandbox Code Playgroud)
然后,假设我们已经ubuntu为Docker 提取了图像,我们可以在Docker终端(即Linux)中执行以下操作:
docker run --rm -v $(pwd):/data ubuntu /data/serviceapp/bin/java net.codetojoy.service.impl.UserServiceImpl
TRACER : hello from UserServiceImpl
Run Code Online (Sandbox Code Playgroud)
重新jlink尝试Java 9 /的这个特性:Linux没有安装Java,Linux二进制文件是在Mac OS上构建的.
| 归档时间: |
|
| 查看次数: |
3112 次 |
| 最近记录: |