Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何运行JDK 9 jlink生成的图像?_Java_Java 9_Java Platform Module System_Jlink - Fatal编程技术网

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

Java 如何运行JDK 9 jlink生成的图像?,java,java-9,java-platform-module-system,jlink,Java,Java 9,Java Platform Module System,Jlink,我跟着拼图走。我成功运行了给定的jlink命令: jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp 这将生成一个“运行时映像”,它是一个分解的目录结构,如下所示: ~ tree -d greetingsapp greetingsapp ├── bin ├── conf │   └── security │   └── policy │  

我跟着拼图走。我成功运行了给定的
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
。我没有看到任何.jar文件或.class文件可以通过捆绑的
java
可执行文件运行。

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

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
是链接器工具,可用于链接一组模块及其可传递的依赖项,以创建称为as的自定义模块运行时映像,该映像可使用随Java 9模块引入的实现。 正如在注释中指出的,如果您只是想执行主类,那么答案是

您可以使用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 

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

我刚才回答了这个问题:第一个命令根本不使用jlink或jlink生成的输出。它使用系统Java和
mods
目录中编译的.class文件。@clay正确。这也是我在模块结构中提到的…更新它以使其清晰。另外一个问题是:如何调试自定义映像?如果有人使用上面的启动程序脚本进行构建,-Xdebug将无法工作。run命令应该是
greetingsapp/bin/launch
而不是
greetingsapp/bin/launcher