如何使用javapackager生成模块化Java应用程序的可执行文件?

时间:2019-07-19 11:09:59

标签: windows java-9 java-module javapackager

环境:Win10,Oracle JDK 9,Eclipse,jlink,javapackager

上下文:我正在尝试使用javapackager生成可执行文件 具有使用jlink 制作的Java自定义运行时映像,并读取javapackager documentation。不可安装。

Jlink创建了一个zip文件,其中包含我封装的所有Java类文件和资源(这意味着我无法从System Explorer访问它们)+自定义jre。它带有一个.bat启动器来运行该应用程序。一切正常。

Walkthrow::1,我发现有一个OpenJDK available from OpenJDK14jpackage实用程序可以使Java模块化应用程序可执行,但仍在开发中。我没有找到任何解决办法。 后来我研究了Inno Setup,但是它不能满足我的需求(因为我不想要安装程序) 后来我发现,从Oracle JDK 8开始,有javapackager工具可以为每个平台(max,linux,windows ..)生成可运行对象。

我无法使javapackager工作。 这是我在Windows cmd上执行的命令的各种尝试之一。

javapackager 
-deploy 
    -native exe
    --add-modules myModule,javafx.graphics,javafx.controls 
    --module-path "C:\path\to\javafx-jmods;C:\path\to\target\classes;C:\path\to\more\jmods" 
    -outdir "C:\myApp" 
    -outfile MyApp 
    -appclass myPackage.MyApp 
     -name "MyApp"

使用上一条命令,我得到了错误:

Error: No application jars foun

因此,我意识到我正在将-deploy命令及其选项与-createjar命令及其选项混合在一起。

有人可以解释如何使用javapackager生成.exe吗?

编辑1

尝试过jpackage(需要将jdk 14与 Wix安装程序作为依赖项):

jpackage --package-type exe -o outputdir --name myApp --add-modules myapp,javafx.graphics,javafx.controls 
--module-path "C:\path\to\some\jmods;C:\path\to\myTarget;C:\path\to\javafx-sdk-11.0.2plugin" -m myapp/App

输出:myApp.1.0.exe。它打开一个cmd和一个“安装程序”,但不执行myApp,因为其中不包含自定义Java运行时环境。

2 个答案:

答案 0 :(得分:1)

像其他JDK一样安装jpackage随附的JDK,并将您的JAVA_HOME设置为它。

作为包装的准备工作,我已指示Maven将项目的所有相关jar文件复制到installer / input文件夹中。

然后转到项目的主文件夹并调用

$JAVA_HOME/bin/jpackage \
--name yourAppName \
--output installer/output \
--input installer/input \
--main-jar yourAppMain.jar \
--main-class xxx.yyy.yourAppMainClass

结果现在应该在安装程序/输出文件夹中。

有关您可以调用的选项的更多详细信息

$JAVA_HOME/bin/jpackage --help

还有一个选项,可以将其他JDK与jpackager一起使用,但这是更高级的。

答案 1 :(得分:0)

如果您的项目是使用Gradle构建的,则可以轻松使用Badass jlink插件:https://github.com/beryx/badass-jlink-plugin 使用jpackage构建安装程序/软件包

关于如何使用OpenJDK 11以及将OpenJDK 14和jpackage一起使用来构建应用程序映像,这仅是为了构建安装程序/软件包: https://walczak.it/blog/distributing-javafx-desktop-applications-without-requiring-jvm-using-jlink-and-jpackage