2013-02-22 74 views
4

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

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

+0

根据[this](http://docs.oracle.com/javafx/2/deployment/packager.htm)它不会生成本地文件。但是,无论如何,这是一个坏主意,所以不要这样做。只需使用打包程序捆绑组件并使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)部署批量。 – 2013-02-22 17:17:54

回答

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

3

你可以这样做。

  1. 将你的应用程序构建成jar,就像你正在做的那样。
  2. 使用-createjar开关运行javafxpackager,根据您现有的jar创建一个新的jar。新的jar包含清单条目,允许您使用java -jar app.jar运行jar。
  3. -deploy-native开关再次运行的javafxpackager包装罐和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文件,第三方打包选项和浏览器嵌入式应用程序。选择最适合您的应用程序,用户,开发技巧和复杂度舒适度的选项。


我已经在过去使用的Unix软件(特别是对企业服务器端应用程序)的本地软件包优秀成功的替代工具链,是mavenrpm maven plugin使用jenkins建立创建部署到nexus存储库nexus yum plugin。该工具链允许您从代码签入转到一组可配置的包,并使用yum依赖关系管理。这个替代工具集虽然需要一些复杂性,但不包括javafxpackager所做的一系列平台。

+0

HelloWorld示例运行良好。它对我的应用程序尝试了相同的方法,并且由于缺少依赖关系而失败。是否有可能包含依赖jar文件? – porst17 2013-02-25 15:20:41

相关问题