java - 如何运行 JDK 9 jlink 生成的图像?

标签 java java-9 java-platform-module-system jlink

我跟着拼图quickstart here .我成功运行了给定的 jlink 命令:

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp

这会生成一个“运行时镜像”,它是一个展开的目录结构,如下所示:

~ tree -d greetingsapp
greetingsapp
├── bin
├── conf
│   └── security
│       └── policy
│           ├── limited
│           └── unlimited
├── include
│   └── darwin
├── legal
│   └── java.base
└── lib
    ├── jli
    ├── security
    └── server

我该如何运行它?我期待的是二进制可执行文件,而不是展开的目录树。

bin目录有一个java和一个keytool。我没有看到任何可通过捆绑的 java 可执行文件运行的 .jar 文件或 .class 文件。

最佳答案

要运行,请执行以下操作:

greetingsapp/bin/java -m com.greetings/com.greetings.Main 

或者,您可以让 jlink 构建执行此操作的启动器脚本

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp --launcher launch=com.greetings/com.greetings.Main

然后运行:

greetingsapp/bin/launcher

形成相同的文档:-

$ java -p mods -m com.greetings/com.greetings.Main

可以执行以运行模块结构中的 Main 类,而无需使用 jshell 进行链接。


此外,jlink 是链接器工具,可用于链接一组模块及其传递依赖性,以创建名为 Modular Runtime Images 可以使用 Java 9 模块引入的 JMOD tool 来完成。 正如评论中指出的那样,如果您只是打算执行主类,则由 @Jorn 回答。

You can run your application by using the java binary in the bin folder of the generated image, and using the command:

java com.greetings.Main

另一方面,创建一个 JMOD 文件以进一步用作模块的示例如下:

jmod create --class-path mods/com.greetings --cmds commands
  --config configfiles --header-files src/h --libs lib
  --main-class com.greetings.Main --man-pages man --module-version 1.0
  --os-arch "x86_x64" --os-name "Mac OS X"
  --os-version "10.10.5" greetingsmod 

编辑:展开+澄清以获得我正在寻找的答案。

关于java - 如何运行 JDK 9 jlink 生成的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413299/

相关文章:

java - 为什么项目 Jigsaw/JPMS?

java - 如何返回斐波那契给定索引之前的每个索引值

第二台显示器上全屏独占模式下的 Java 框架

java - 模块 jrt.fs 和模块 java.base 中的 RuntimeException : Package jdk. internal.jimage.decompressor

java - 正则表达式或字符串操作从字符串派生自动模块名称

java - 在 Java 9 中查询交换空间

java - 为什么我们在java-9模块系统中需要require static?

java - while(true) 中断后 while 循环打印错误语句

java - 将 java 日期传递到剩余查询参数中

java - 修补模块引发模块未找到错误