java 9:JLink 创建了无效图像 - 缺少模块可执行脚本
java 9: JLink created invalid images - missing module executable script
我正在创建一个包含 3 个模块 user
、dept
和 account
的示例应用程序。在我的用户模块中,我有一个主 class 并使用以下命令编译我的模块:
javac -d target --module-source-path src $(find -name "*.java")
编译后,为运行执行如下命令:
java -p target -m com.user/com.user.info.Launcher
运行ning java个模块成功后的输出。但是当尝试使用 jlink
创建 运行time 图像时,图像创建成功但模块可执行脚本不存在。为了创建图像,我使用以下命令:
jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app
在运行time image中,我有bin
目录,但是这个目录只包含java
和keynote
脚本。我也期待用户主 class 脚本来执行我的应用程序。
我的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
创建 运行time VM 映像,其中仅包含所需的模块。
由于您指定了 --add-modules com.user
图像将包含 com.user
模块,以及它(直接或间接)依赖的所有模块。
您可以 运行 您的应用程序,方法是使用生成图像的 bin
文件夹中的 java
二进制文件,并使用以下命令:
java com.user.info.Launcher
您还可以让 jlink
使用 --launcher <command>=<module>/<main>
选项生成启动器脚本。在您的情况下,您可以执行以下操作:
jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app --launcher launch=com.user/com.user.info.Launcher
之后,您只需使用 bin
目录中的 launch
到 运行 应用程序即可。
我正在创建一个包含 3 个模块 user
、dept
和 account
的示例应用程序。在我的用户模块中,我有一个主 class 并使用以下命令编译我的模块:
javac -d target --module-source-path src $(find -name "*.java")
编译后,为运行执行如下命令:
java -p target -m com.user/com.user.info.Launcher
运行ning java个模块成功后的输出。但是当尝试使用 jlink
创建 运行time 图像时,图像创建成功但模块可执行脚本不存在。为了创建图像,我使用以下命令:
jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app
在运行time image中,我有bin
目录,但是这个目录只包含java
和keynote
脚本。我也期待用户主 class 脚本来执行我的应用程序。
我的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
创建 运行time VM 映像,其中仅包含所需的模块。
由于您指定了 --add-modules com.user
图像将包含 com.user
模块,以及它(直接或间接)依赖的所有模块。
您可以 运行 您的应用程序,方法是使用生成图像的 bin
文件夹中的 java
二进制文件,并使用以下命令:
java com.user.info.Launcher
您还可以让 jlink
使用 --launcher <command>=<module>/<main>
选项生成启动器脚本。在您的情况下,您可以执行以下操作:
jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app --launcher launch=com.user/com.user.info.Launcher
之后,您只需使用 bin
目录中的 launch
到 运行 应用程序即可。