使用javafxpackager进行非JavaFX2应用程序

时间:2013-02-22 17:07:59

标签: java deployment javafx-2 setup-deployment

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

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

2 个答案:

答案 0 :(得分:3)

你可以这样做。

  1. 按照您目前的行动将您的应用构建到罐子里。
  2. 使用-createjar开关运行javafxpackager,根据您现有的jar创建一个新jar。新jar将包含清单条目,允许您使用java -jar app.jar运行jar。
  3. 使用-deploy-native开关再次运行javafxpackager,将jar和java运行时打包为包含安装程序的本机应用程序(self-contained application)。
  4. 重要的命令是:

    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 Apps和Linux RPM或DEB包。有关如何为每个操作系统自定义安装的详细信息,请参阅javafxpackager文档。如果使用命令行javafxpackager工具,则需要为每个目标操作系统创建打包shell脚本。如果使用javafx ant包装任务,则可以跨操作系统使用相同的打包ant脚本。有关使用ant打包任务构建本机包的示例,请查看source for the javafx samples(如Ensemble或SwingInterop)。

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


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


    我过去使用的替代工具链,对于unix软件的本机包(特别是企业的服务器端应用程序)非常成功,maven使用{{3}创建rpm maven plugin版本使用jenkins部署到nexus存储库。此工具链允许您从代码签入到具有nexus yum plugin依赖关系管理的一组可部署包。这个备用工具集确实需要使用一些复杂功能,并不包括javafxpackager所做的平台范围。

答案 1 :(得分: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弹出一个Window。

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的应用程序。