当前位置: 首页 > 知识库问答 >
问题:

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

从焱
2023-03-14

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

共有2个答案

充煌
2023-03-14

一般来说,艾伦·贝特曼的答案在信息方面没有任何补充,我将提供一个有效的例子。此示例演示了在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解包在本地目录中(指定为命令行参数),我们将其称为jlink(在本例中的Mac OS上)<代码>JAVA\u主页是解决方案的关键:

# $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

为了重复Java9/jlink的这个特性:Linux没有安装Java,Linux二进制文件是在Mac OS上构建的。

湛嘉歆
2023-03-14

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

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

 类似资料:
  • 问题内容: 我在Linux机器上使用jlink创建了运行时映像。而且我看到该文件夹下的文件夹。这是否意味着我只能在Linux平台上使用此运行时映像?如果是,是否有任何方法可以在一个平台上为另一个平台创建运行时映像(例如,在Linux for Windows上,反之亦然) 问题答案: 该目录用于标头文件,例如,在编译使用JNI和其他本机接口的C / C ++代码时需要这些标头文件。这与无关。 该工具

  • 问题内容: 该主题已经有几个问题,但是似乎都无法正常工作。 我的要求是构建一个可在 每个平台 上创建 一个jar 的ant脚本,即一个用于Windows x86的 jar ,一个用于Windows x64,Linux x86 / x64的 jar 。 有人有进一步的见解吗? 使用上述方法,我无法产生可行的解决方案。它以未自动加载SWT jar文件结尾或未包含在类路径中而结束。 如果有人能提出一个可

  • 问题内容: 我想从Java代码运行另一个应用程序。 进程已启动,但在后台运行。如何使其在前台运行? 问题答案: 您应该告诉cmd.exe您希望它在新窗口中打开:

  • 我被要求连接到公司大型机上的Db2数据库。我得到了主机名、端口号和数据库。我能够使用Java和IBM JDK版本1.8以及Db2 Universal JDBC驱动程序成功地连接到它。现在我已经连接到它,我如何找出什么是下面躺着的大型机平台。哪里是z/OS、OS/400还是VSE?是否有任何SQL查询可以获得该平台信息?另外,如何找出DB2的版本?

  • 问题内容: 我正在尝试在pyinstaller的可执行文件中添加Chromedriver。虽然这是可能的,但似乎在尝试在另一台计算机上运行此错误消息。 我已经尝试了一些职位,包括本的一个,但不幸的是,这并没有提供预期的效果。最好的情况是,当chrome exe位于同一文件夹中时,我可以在自己的计算机上运行它,这无济于事。 代码1: 主程序 在另一台PC上运行时,我得到的是: 错误1: 找不到Chr

  • 我有工人班 还有一个窗口类,它使用tkinter 但是,即使长任务()是在一个单独的线程中运行,我的GUI冻结-为什么? 我的目标是更新窗口中的一个进度条,而长任务()正在运行。长任务()内部更新一个数字,范围从0到100。 问题:在longTask()运行时,如何实现这一点并防止GUI冻结? 注意:显然线程不是在我调用t.start()时启动的,而是在我通过t=线程启动线程时启动的。线程...