使用 JPackage 制作 AppImage

Using JPackage to make an AppImage

我正在尝试使用 JPackage 创建一个 AppImage(在 Ubuntu 18.04 系统上使用 OpenJDK 14)

我找到的所有例子都是

形式
jpackage --type app-image --name myappimage --input target  --main-jar myuberjar.jar  --main-class myapplication.core  --verbose

当我 运行 这个时,我得到一个目录 ./myappimage/ 并且在 ./myappimage/bin/ 中有一个我可以启动到 运行 应用程序的可执行文件。但是整个事情并没有像我希望的那样捆绑到一个 AppImage 文件中。

我在这里错过了什么?

虽然AppImage is a desireable format it is not (yet) supported by JPackage. While the JPackage Documentation提到了一个命令行选项app-image,但它的意思是不同的:

--app-image文件路径 用于构建可安装包的预定义应用程序映像的位置(绝对路径或相对于当前目录)。 请参阅创建应用程序图像模式选项以创建应用程序图像。

所以 app-image 文件夹只是 JPackage 在将应用程序转换为 deb/msi/dmg 之类的本机包之前收集应用程序的所有零碎信息的文件夹。因此,请不要被这两个不同但名称相似的概念混淆。

您最好的方法是使用 JPackage assemble 所需的一切(就像 app-image 的情况一样),然后使用 AppImage.org 提供的工具从那里获取它。越来越简洁:

像这样创建应用程序图像后告诉 JPackage 退出:

jpackage --type app-image --dest app-image ...

这将使您将所有需要的文件收集在 app-image 目录中。不,不是全部。对于我的 OpenJDK(内部版本 16.0.1+9-Ubuntu-120.04),JPackage 命令忘记创建启动程序(*.desktop 文件),并且在完成对 debian 包的构建时忘记安装该文件。看看如何 .

从这里开始,您需要按照 AppImage packaging guide 创建一个 AppDir 目录结构,然后再最终调用打包程序。我将 app-image 目录复制到 AppDir/usr 并在 AppDir 中创建了一些符号链接。还需要创建 .desktop 文件。最重要的是指向 AppDir/usr/bin/ 中的可执行文件的符号链接 AppDir/AppRun... 符号链接的名称必须是 AppRun。

终于关注了Manual packaging and run the appimagetool. Information how to run it seems only on the README.md。我最终得到了一个文件扩展名为 .appimage.

的可执行文件

设置该文件的可执行权限并运行它。

如果您希望在 jpackage 构建安装程序作为第二步之前修改安装目录的内容,或者如果您希望 运行 或测试在不制作安装映像的情况下发布结构。

例如,在 Windows 上,我使用 app-image 将本地构建目录设置为:

jpackage --type app-image --dest jpackage.dir ...

然后我将生成的 EXE 重命名为 SCR 文件,这样我就可以将可执行文件用作 Windows 屏幕保护程序。您可能需要在此处进行其他更改。如果您还通过以 jpackage.dir\AppName\xyz[.exe]jpackage.dir/AppName/xyz

启动来测试 app-image 目录中的应用程序,您以后可能会节省时间

最后应用最后的 jpackage 阶段从修改后的应用程序映像结构生成安装程序:

jpackage --app-image jpackage.dir/yourappname --type exe

在您的情况下,使用 pkg|dmg 或其他适合 --type 的值。如果您不需要进行修改,请跳过 --type app-image 步骤并直接打包为目标环境的存档格式。