【问题标题】:Using javafxpackager for non-JavaFX2 application将 javafx 打包器用于非 JavaFX 应用程序
【发布时间】:2013-02-22 17:07:59
【问题描述】:

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

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

【问题讨论】:

  • 根据this,它不会成为本地人。但是,无论如何,这是一个坏主意,所以不要这样做。只需使用打包程序捆绑组件并使用Java Web Start 部署批次。

标签: java deployment javafx-2 setup-deployment


【解决方案1】:

你可以这样做。

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

重要的命令如下:

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

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

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

要构建 Windows 安装程序,您需要在计算机上安装额外的免费软件,如 javafxpackager 文档中所述。要构建 rpm,您需要在机器上安装 rpmbuild 打包实用程序。目前无法从单台机器上为所有操作系统构建原生包(您只能构建特定于该机器类型的原生包)。


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


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

【讨论】:

  • HelloWorld 示例运行良好。它对我的应用程序尝试了相同的方法,但由于缺少依赖项而失败。是否有可能包含依赖 jar 文件?
【解决方案2】:

我有一个可用的 JavaFX 2 应用程序,我使用 JavaFX Ant Tasks (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 的应用程序。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2014-05-27
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多