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

标签 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 启动器来运行该应用程序。一切正常。

步行:第一次我发现有一个 jpackage OpenJDK 实用程序 available from OpenJDK14使 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 运行时环境。

最佳答案

像任何 JDK 一样安装 jpackage 提供的 JDK,并将您的 JAVA_HOME 设置为它。

作为打包的准备工作,我已指示 Maven 将项目的所有依赖 jar 文件复制到安装程序/输入文件夹中。

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

$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 一起使用,但这是更高级的。

关于windows - 如何使用 javapackager 生成模块化 Java 应用程序的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111245/

相关文章:

java - Java 9 中的 opens 指令

java - 如何在没有 Java 9+ 非法访问警告的情况下从进程获取 pid?

Java 9 迁移 javax.annotation

Java 9 新文档结构 - "old"java 包在哪里?

windows - 如何从 cmd.exe (Windows XP) 运行程序?

windows - 需要在 Windows 7 中完全删除设备驱动程序

Java模块: accessibility problems for Mockito 2. 20.0

java - Java 工具用于自动从 jar 名称派生模块名称的算法

java - 在 Windows 7 上信任 Java 7 的自签名证书

python - 手动安装SciPy,NumPy,MatPlotlib(Windows)