java - 通过示例在 Windows 10 机器上安装 Java 可执行文件
问题描述
我想一些具有在 Windows 桌面上交付 Java 应用程序经验的 Java 大师将能够胜任这一点。我一直是 Mac/Linux Java 开发人员,所以这对我来说是未知领域:-/。
我必须编写一个 Java 8 Swing 应用程序并将其安装在 Windows 10(64 位)机器上。我的游戏计划是将应用程序打包为可执行 JAR 并使用Launch4J进行包装,使其看起来像本机 Windows EXE(.exe 文件)。然而,它比分发时更复杂一点:
- 将有上面提到的 JAR/EXE,让我们调用它
myapp.exe
(构建自myapp.jar
) - 该应用程序会将日志输出到(本地?)目录,
myapp.log
- 该应用程序将在运行时加载一个配置文件,
myapp.properties
- 分发还应包含用户指南,
MyApp User Guide.html
假设机器上已经安装了 Java 8 JRE/JDK,所以我们不需要担心安装 Java 本身。
安装过程必须简单,包括:
- 从机器上完全删除旧版本(以及它的所有其他工件,如日志文件、配置/属性文件、用户指南等)
- 在 Windows 10 默认位置安装新版本,或允许用户指定其他位置
此外,如果可能的话,我希望安装过程包括:
- 要求检查最小内存和磁盘空间、操作系统版本信息/兼容性(即确保其安装在 Windows 10 上等)
- 提供易于使用的向导,例如用户可以单击的 MSI
- 可选择安装用户桌面的快捷方式
鉴于这一切,我想知道在现代 Windows 10/Java/Launch4J 环境中我的选择是什么。是否有工具可以帮助我快速编写 MSI 脚本,或者我是否必须在 C#/.NET 中编写自己的脚本并将其作为单独的二进制文件/项目?如果 MSI 不是一个选项,那么存在哪些选项可能会击中我上面的所有子弹?
我意识到我可以将整个内容作为 ZIP 分发,并让安装过程看起来像:
- 将 ZIP 保存到用户机器上的某个位置,例如桌面
- 手动将前一个应用程序及其工件移至回收站
- 解压缩新的 ZIP
然而,这感觉很笨拙,我正在寻找更专业的东西。这里有什么解决方案吗?
解决方案
JDK 8 捆绑了一个名为javapackager
(以前称为javafxpackager
)的工具,它是 JavaFX 的一部分。但是,您可以使用它打包 java swing 应用程序而不使用 JavaFX。该工具可以生成包含应用程序和 Java 运行时的安装程序文件(exe
或)。msi
这是一个例子:
javapackager -deploy -native exe -Bruntime="C:\Program Files\Java\jdk1.8.0_66\jre" -Bicon=app_icon.ico -BsystemWide=true -BshortcutHint=true -outdir packages -outfile appFile -srcdir dist -srcfiles MyApp.jar;COPYING.txt -appclass somePackage.MainClass -BlicenseFile=COPYING.txt -name appName -title "应用程序名称"
有关更多信息,请参阅使用 javapackager 添加图标到捆绑包
还有一个名为的新工具jpackage
,它基于javapackager
. 建议与下一个 JDK 版本 JDK 14 一起发布。请注意,javapackager
作为 JavaFX 删除的一部分,自 JDK 11 以来已从 JDK 中删除。
推荐阅读
- angular - Angular 6窗口滚动回调函数不更新html视图
- c# - 在 C# 中搜索 Azure-Blob-Storage 文件并在 mvc 应用程序中获取
- android - Firebase 使用自定义适配器将数据检索到多个 textview 和 listview 中,显示无错误且无数据显示
- java - 如何对其输入完全不改变函数行为的函数进行单元测试?
- performance - 了解 Intel CPU 上的 4K 混叠
- powershell - 当合法变量字符跟随字符串中的变量时,如何创建PowerShell字符串插值?
- angularjs - 模块 ngAnimate 不可用
- javascript - 如何使用 JavaScript 打开多个 DIV
- visual-studio - 在visual studio中,windows平台自动格式化特征文件的快捷键是什么?
- java - 无法将 fx:id 与控制器链接