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



我用eclipse制作了Java应用程序(在*。JAR 中导出>),Linux(。?)和Mac(。?)。我没有任何Linux或Mac机器,所以我不知道每个Linux或Mac机器都需要什么扩展文件。所以我有几个问题:

  • 对于Windows,我使用laining4j创建了我的 *.exe文件,但是Mac和Linux是否有任何等效的?

  • 我的应用程序将选项保存到Windows注册表中(我使用了" JavareGisrtyWrapper "库)。Mac和Linux是否有任何"注册表"(以及如何在此处读/写信息)?

  • 在下载后尝试启动 *.exe文件时,是否有可能避免使用Windows警报"未知发布者"?(我会在Mac和Linux上遇到相同的问题吗?)。我尝试创建自己的证书,并用" signtool.exe"签名,但它不起作用。

谢谢!

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

运行JAR应用程序

的脚本

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

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

Windows注册表等效于基于UNIX的系统

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

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

签署Windows EXE文件

用于签署Windows EXE文件,您可以尝试使用Microsoft的标志工具。

这是一个类似的stackoverflow问题:签署Windows EXE文件

linux不会具有扩展名。通常,二进制文件只是没有一个。要将它们标记为可执行文件,您将在文件上设置 x标志,该文件将授予文件的权利。

OSX也没有必要的扩展名。如果要在Mac上安装程序,则将其包装在文件夹中(在Mac上,这些看起来不像文件夹,它们看起来像程序,但在其他OSS上显示为文件夹),使用扩展名.app

launch4j可以为您的所有平台,Mac OSX,Linux和Windows生成二进制文件。

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

在窗户上,您也可以购买证书。这样做并签署了程序后,"警报"可能仍会出现用户的设置,但是它将显示开发人员或公司名称而不是未知(仅在未签名或已签署的程序后才出现未知签名)。

刚运行:java -jar [jar file]

或将其放入脚本文件中:myScript.sh设置执行权限:

> chmod ugo+x myscript

示例脚本:

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

然后运行./myscript.sh

最新更新