7

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

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目录,但该目录仅包含javakeynote脚本。我也期待用户主类脚本来执行我的应用程序。

我的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)

我该如何解决这个问题?

4

1 回答 1

13

jlink创建一个运行时 VM 映像,其中仅包含所需的模块。

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

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

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

之后,您就可以launchbin目录中使用来运行应用程序。

于 2017-05-20T12:37:40.800 回答