将 .jar 转换为适用于 Windows、Linux 和 Mac 的应用程序

Posted

技术标签:

【中文标题】将 .jar 转换为适用于 Windows、Linux 和 Mac 的应用程序【英文标题】:Convert .jar to an application for Windows, Linux & Mac 【发布时间】:2016-11-02 15:32:30 【问题描述】:

我用 Eclipse 制作了一个 Java 应用程序(在 *.jar 中导出),我想将它导出到 Windows (.exe)、Linux ( .?) 和 MAC (.?)。我没有任何 Linux 或 MAC 机器,所以我不知道每个机器需要什么扩展文件。所以我有几个问题:

对于 Windows,我使用 Launch4j 创建了我的 *.exe 文件,但对于 MAC 和 Linux 是否有任何等价物?

我的应用程序将选项保存到 Windows 注册表中(我使用了“JavaRegisrtyWrapper”库)。 MAC 和 Linux 是否有任何等效的“注册表”(以及如何在那里读/写信息)?

当用户在下载后尝试启动 *.exe 文件时,是否可以避免 Windows 警告“未知发布者”? (我会在 MAC 和 Linux 上遇到同样的问题吗?)。我尝试创建自己的证书,并使用“signtool.exe”对文件进行签名,但没有成功。

谢谢!

编辑:在将 *.jar 文件转换为任何其他格式之前,我必须修改我的代码以获取用户的操作系统以及每种情况的“文档”文件夹。我认为os.name 可以满足第一个请求,但我可以将user.home + "Documents" 用于Windows、Linux 和Mac(如果此文件夹存在...)?

【问题讨论】:

为 linux 创建一个简单的 bash 脚本,并与你的 jar 一起交付,然后可以通过脚本启动它 欢迎来到 ***!你的英语很棒,你的问题也很棒:) launch4j 也是跨平台的。您可以使用它生成 ELF 和 Mach-O 二进制文件(linux 和 MAC)。 @4castle 谢谢^^ 请记住,您可以将其发布为 jarfile。大多数 Linux 用户都能够弄清楚如何运行 JAR 文件,因此您不必将其包装在 shell 脚本中。 【参考方案1】:

运行 JAR 应用程序的脚本

在 Linux 和 Mac OS 上,您可以创建一个运行 .jar 文件的 bash 脚本:

#!/bin/bash java -jar application.jar

在基于 Unix 的系统上等效的 Windows 注册表

在 Linux 和 Mac Os 上没有等效的 Windows 注册表。您可以将配置存储在文本文件中。机器特定的配置通常存储在 /etc 目录树中。

这是一个类似的超级用户问题:https://superuser.com/questions/295635/linux-equivalent-of-windows-registry

签署 Windows EXE 文件

要签署 Windows exe 文件,您可以尝试使用 Microsoft's Sign Tool。

这是一个类似的 *** 问题:Signing a Windows EXE file

【讨论】:

【参考方案2】:

只需运行它:java -jar [你的 jar 文件]

或将其放入脚本文件中,例如:myscript.sh 设置执行权限:

> chmod ugo+x myscript

示例脚本:

#!/bin/bash
$JAVA_HOME/bin/java -jar [jarfile]

然后运行 ​​./myscript.sh

【讨论】:

如果我在 *.jar 文件中编译我的应用程序而不转换为另一种格式,是否必须在 Linux 和 Mac 上包含此脚本?【参考方案3】:

Linux 不一定有扩展。通常二进制文件只是没有一个。要将它们标记为可执行文件,请在文件上设置 +x 标志,这将授予文件执行权限。

OSX 也不一定有扩展。如果你想在 Mac 上安装你的程序,它将被打包在一个文件夹中(在 Mac 上这些看起来不像文件夹,它们看起来像程序,但在其他操作系统上它们显示为文件夹),扩展名为 .app

Launch4j 可以为您生成适用于所有平台、Mac OSX、Linux 和 Windows 的二进制文件。

“警报”问题是因为您的应用未签名。签署申请意味着将其密封,以便以后无法修改(可以修改,但会破坏密封)。在 OSX 上,您可以获得开发人员证书并在 .app 上使用 codesigncodesign -s "certname" 已安装证书)。在 Linux 上,您不会遇到此问题,因为程序通常不会被签名(包管理器的包通常会被签名,安装后此信息会丢失)。

在 Windows 上,您还可以购买证书。这样做并签署您的程序后,“警报”可能仍然会出现给定用户的设置,但它会显示开发人员或公司名称而不是未知(未知只会在未签名或签名程序已被修改后出现签名)。

【讨论】:

谢谢!但是如何使用 Launch4j 生成二进制文件?他只想要一个 *.exe 输出文件.. 在 mac 和 linux 上做。如果您分发到其他 ose,请对其进行测试

以上是关于将 .jar 转换为适用于 Windows、Linux 和 Mac 的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX .jar 适用于 Windows 和 OSX,但不适用于 Linux

如何将 windows 窗体库转换为 windows phone 库

如何将命令从 GitBash 转换为 Windows 命令行?

将BitmapImage转换为System.Windows.Media.Brush

适用于 Windows 的 FFMPEG 批量转换 [重复]

为 Windows 查找 javafx jar 文件