java 9:JLink创建了无效图像 – 缺少模块可执行脚本

我正在创建一个包含3个模块用户,部门和帐户的示例应用程序.在我的用户模块中,我有一个主类,并使用以下命令编译我的模块:

javac -d target --module-source-path src $(find -name "*.java")

编译后,执行以下命令运行:

java -p target -m com.user/com.user.info.Launcher

运行java模块后的输出成功.但是当尝试使用jlink创建运行时映像时,映像创建成功但模块可执行脚本不存在.为了创建图像,我使用以下命令:

jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app

在,运行时映像,我有bin目录,但是这个目录只包含java和keynote脚本.我期待用户主类脚本,以执行我的应用程序.

我的Java版本如下:

java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+165)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode)

我该如何解决这个问题?

最佳答案
jlink创建一个运行时VM映像,其中只包含所需的模块.

由于您指定了–add-modules com.user,因此该映像将包含com.user模块以及它(直接或间接)所依赖的所有模块.

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

java com.user.info.Launcher

您还可以使用–launcher< command> =< module> /< main>让jlink生成启动器脚本.选项.在你的情况下你可以做类似的事情:

jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app --launcher launch=com.user/com.user.info.Launcher

之后,您可以使用bin目录中的launch来运行应用程序.

转载注明原文:java 9:JLink创建了无效图像 – 缺少模块可执行脚本 - 代码日志