将 .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
上使用 codesign
(codesign -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