4

我有一个由几个预构建 JAR 文件组成的 Java 应用程序,我需要将它们部署到不同的平台。我最近发现javafxpackager它能够为 JavaFX2 应用程序为 Windows、Mac 和 Linux 创建本机安装程序/二进制文件。由于我的应用程序是预构建的并且不使用 JavaFX2,因此我没有让打包程序与我的应用程序一起使用。

有没有人有这方面的经验并且可以提供帮助?或者是否有其他工具可以javafxpackager为非 JavaFX2 应用程序提供功能?

4

2 回答 2

3

你可以这样做。

  1. 像您当前所做的那样将您的应用程序构建到 jar 中。
  2. 使用开关运行 javafxpackager 以-createjar基于现有 jar 创建一个新 jar。新 jar 将包含清单条目,允许您使用java -jar app.jar.
  3. 再次运行 javafxpackager-deploy-native切换以将 jar 和 java 运行时打包为带有安装程序的本机应用程序(自包含应用程序)。

重要的命令如下:

echo make an executable jar file
$JAVA_HOME/bin/javafxpackager -createjar -srcdir . -appclass start.HelloWorldSwing -srcfiles HelloWorldSwing.jar -noembedlauncher -outdir . -outfile HelloWorld.jar

echo package the jar and java runtime as a native application with installer
$JAVA_HOME/bin/javafxpackager -deploy -srcdir . -srcfiles HelloWorld.jar -outdir . -outfile HelloWorld -appclass start.HelloWorldSwing -native -name HelloWorld

这是一个完整的 OS X 脚本,您可以使用它来构建 Java 应用程序、为其创建本机应用程序包、安装本机包并运行已安装的应用程序。该脚本使用javafxpackager创建本机应用程序包。安装的应用程序是一个不使用 JavaFX 的 Swing 应用程序(只是为了证明 javafxpackager 不需要只使用 JavaFX 代码)。此外,脚本中的 javafxpackager 命令利用了先前使用 jar 命令创建的 jar,以表明 javafxpackager 不需要处理原始类文件,但可以将先前使用其他工具链构建的 jar 作为输入。

您可以为其他操作系统和打包格式创建包,例如 Windows 应用程序和 Linux RPM 或 DEB 包。有关如何为每个操作系统自定义安装的详细信息,请参阅 javafxpackager 文档。如果您使用命令行 javafxpackager 工具,那么您将需要为每个目标操作系统创建打包 shell 脚本。如果您使用 javafx ant 打包任务,那么您可以跨操作系统使用相同的打包 ant 脚本。查看javafx 示例(例如 Ensemble 或 SwingInterop)的源代码,了解有关使用 ant 打包任务构建本机包的示例。

要构建 Windows 安装程序,您需要按照 javafxpackager 文档中的说明在您的计算机上安装其他免费软件。要构建 rpm,您需要在机器上安装 rpmbuild 打包实用程序。目前不可能从一台机器上为所有操作系统构建原生包(您只能构建特定于该机器类型的原生包)。


请记住,javafxpackager 本机包只是众多 Java 应用程序部署选项之一。其他包括 webstart、可执行 jar 文件、第 3 方打包选项和浏览器嵌入式应用程序。选择最适合您的应用程序、用户、开发技能和复杂度舒适度的选项。


我过去使用的另一个工具链在 unix 软件的本机软件包(尤其是企业的服务器端应用程序)方面取得了巨大成功,它是maven ,它使用jenkins创建的rpm maven 插件构建,并使用nexus yum 插件部署到nexus存储库。这个工具链允许你从代码签入到一组具有yum依赖管理的可部署包。这个替代工具集确实需要一些复杂性才能使用,并且不涵盖 javafxpackager 所做的平台范围。

于 2013-02-23T09:25:55.400 回答
2

我有一个工作 JavaFX 2 应用程序,我使用 JavaFX Ant 任务(http://docs.oracle.com/javafx/2/deployment/javafx_ant_task_reference.htm#CIADCBJG)为 Mac OS X 创建一个应用程序包。我知道 JavaFX Ant Tasks 与 JavaFX Packager 工具并不完全相同,但它们提供的功能非常相似。

我将我的 JavaFX 2 应用程序的主应用程序类更改为不使用任何 JavaFX 东西,而只是使用 AWT 弹出一个窗口。

import java.awt.*;
public class MainApplication {
    public static void main(String [] args) {
        Frame f = new Frame("Example 1");
        f.show();
    }
}

然后我再次运行 Ant 构建脚本(未更改)以创建一个新的应用程序包。新的应用程序包可以毫无问题地在 Mac 上启动。因此,我认为您可以将 javafxpackager 用于非 JavaFX2 应用程序,至少是基于 Java AWT 的应用程序。

于 2013-02-23T03:05:36.477 回答