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

我按照此处的拼图快速入门进行操作。我成功运行了给定的命令: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

如何运行此命令?我期待的是二进制可执行文件,而不是分解的目录树。

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


答案 1

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

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

可以执行以从模块结构运行类,而无需使用链接。Mainjshell


此外,链接器工具可用于链接一组模块及其传递依赖项,以创建称为模块化运行时映像的自定义模块化运行时映像,该映像可以使用 Java 9 模块中引入的 JMOD 工具完成。正如注释中指出的那样,如果您只是打算执行主类,@Jorn回答。jlink

您可以通过在生成的映像的 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 

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


答案 2

推荐