5

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

我找到的所有例子都是这种形式

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

当我运行它时,我得到一个目录./myappimage/./myappimage/bin/其中有一个可执行文件,我可以启动它来运行应用程序。但整件事并没有像我想要的那样捆绑到一个 AppImage 文件中。

我在这里想念什么?

4

2 回答 2

1

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

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

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

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

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

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

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

于 2022-01-19T16:44:54.423 回答
1

虽然AppImage是一种理想的格式,但 JPackage (尚)不支持它。虽然JPackage 文档提到了一个命令行选项 app-image,但它的含义是不同的:

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

因此,app-image 文件夹只是 JPackage 在将应用程序转换为像 deb/msi/dmg 这样的本机包之前收集应用程序的所有点点滴滴的文件夹。因此,不要对这两个不同但名称相似的概念感到困惑。

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

告诉 JPackage 在创建 app-image 后退出,如下所示:

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

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

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

最后按照手动打包并运行appimagetool。如何运行它的信息似乎只在README.md上。我最终得到了一个文件扩展名为 .appimage 的可执行文件。

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

于 2022-01-18T06:41:01.060 回答