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

7

我用Eclipse制作了一个Java应用程序(以*.jar格式导出),我想要将它导出为Windows(.exe)、Linux(.?)和MAC(.?)的格式。我没有任何Linux或MAC设备,所以我不知道每个系统需要什么扩展名。因此,我有几个问题:

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

  • 我的应用程序将选项保存到Windows注册表中(我使用了“JavaRegisrtyWrapper”库)。是否有类似于Mac和Linux的“注册表”等价物(我该如何在那里读/写信息)?

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

谢谢!

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


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

3

运行JAR应用程序的脚本

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

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

Unix系统上的Windows注册表等效项

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

这里是类似的superuser问题:https://superuser.com/questions/295635/linux-equivalent-of-windows-registry

签署Windows EXE文件

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

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


0

Linux通常不需要扩展名。通常二进制文件没有扩展名。要将它们标记为可执行文件,您需要在文件上设置+x标志,这将授予该文件被执行的权限。

OSX也不一定需要扩展名。如果您想在Mac上安装程序,它将被打包在一个文件夹中(在Mac上,这些看起来不像文件夹,而是看起来像程序,但在其他操作系统上,这些看起来像文件夹),并带有扩展名.app

Launch4j可以为所有平台生成二进制文件,包括Mac OSX、Linux和Windows。

"警报"问题是因为您的应用程序未签名。签署应用程序意味着将其密封起来,以防止之后进行修改(虽然可以修改,但会破坏密封)。在OSX上,您可以获得开发人员证书,并在.app上使用codesign(使用已安装的证书codesign -s "certname")。在Linux上,您不会遇到此问题,因为程序通常不会被签名(软件包管理器的软件包通常会被签名,在安装后会丢失此信息)。

在Windows上,您也可以购买证书。签署程序后,“警报”可能仍会出现,这取决于用户的设置,但它将显示开发人员或公司名称,而不是未知(如果未签名或签名后的程序已被修改,则仅会出现未知)。

谢谢!但是我该如何使用Launch4j生成二进制文件呢?他只需要一个*.exe输出文件。 - Deaudouce
请在Mac和Linux上进行操作。如果您要分发到其他操作系统,请进行测试。 - Nidhoegger

0

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

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

> chmod ugo+x myscript

示例脚本:

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

然后运行 ./myscript.sh


如果我将我的应用程序编译成 *.jar 文件而不转换为其他格式,那么在 Linux 和 Mac 中是否必须包含这个脚本? - Deaudouce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接