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

时间:2017-09-25 20:03:09

标签: java java-9 jigsaw 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目录包含javakeytool。我没有看到任何.jar文件或.class文件通过捆绑的java可执行文件运行。

1 个答案:

答案 0 :(得分:10)

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

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回答。

  

您可以使用bin中的java二进制文件来运行您的应用程序   生成的图像的文件夹,并使用命令:

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 

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