这些Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
任何独立的Java应用程序或Java Web Start应用程序都可以打包为自包含的应用程序。如果您有一个Java小程序,请参阅将Java小程序重写为Java Web Start应用程序,以获取将小程序转换为Java Web Start应用程序的信息,然后可以将其打包为自包含的应用程序。
在转换应用程序之前,请确保您的平台已安装所需的先决条件。有关详细信息,请参阅打包自包含应用程序的先决条件。
本部分将从部署Java Web Start应用程序中的动态树演示转换为自包含的应用程序。您可以从自包含应用程序示例下载此演示的源文件。
确定并组织应用程序所需的文件。一个简单的应用程序可能只需要一个JAR文件。更复杂的应用程序可能还需要额外的库或资源。自包含的应用程序还可以使用自定义资源,如图标或配置文件。
动态树演示只需要DynamicTreeDemo.jar文件,该文件位于项目的/dist目录中。Java Web Start版本的应用程序所需的HTML和JNLP文件不需要,并且自包含应用程序的打包工具会忽略它们。
为动态树演示提供自定义图标,表示应用程序在用户的桌面上安装时的图标,为每个支持的平台提供一个图标。这些图标放置在/src/package/platform目录中。对于每个支持的平台,图标以不同的格式提供:Windows使用.ico格式,Linux使用.png格式,OS X使用.icns格式。
以下示例显示了在创建自包含的捆绑包之前,动态树演示项目的目录结构:
/packager_DynamicTreeDemo <--- 应用程序项目
/dist
DynamicTreeDemo.jar
...
/src
/package <--- 自定义资源
/linux
/macosx
/windows
/webstartComponentArch <--- 应用程序源文件
...
设置所需的打包任务的Ant任务。这些任务可以添加到项目的build.xml文件中,或者放在由build.xml文件导入的单独文件中。
对于动态树演示,项目根目录中的packager.xml文件包含了用于生成自包含应用程序包的Ant任务。下面是packager.xml文件的源代码示例:
<project name="DynamicTreePackaging" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<echo>${java.home}/../lib/ant-javafx.jar</echo>
<target name="package" depends="jar">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${java.home}/../lib/ant-javafx.jar;src"/>
<fx:deploy outdir="${basedir}/build/packager"
outfile="DynamicTreeDemo"
nativeBundles="all"
verbose="false">
<fx:application name="动态树演示"
mainClass="webstartComponentArch.DynamicTreeApplication"
version="1.0"
/>
<fx:resources>
<fx:fileset dir="dist" includes="DynamicTreeDemo.jar"/>
</fx:resources>
<fx:info title="动态树演示"
vendor="我的公司"
description="动态Swing树的演示"
category="演示"
copyright="(c) 2014 我的公司"
license="3 Clause BSD"
/>
<fx:bundleArgument arg="linux.bundleName" value="dynamic-tree-demo"/>
<fx:bundleArgument arg="email" value="maintainer@example.com"/>
<fx:bundleArgument arg="mac.CFBundleName" value="Java树演示"/>
<fx:bundleArgument arg="win.menuGroup" value="Java演示"/>
</fx:deploy>
</target>
</project>
使用以下信息设置Ant任务:
使用xmlns:fx="javafx:com.sun.javafx.tools.ant作为命名空间。
taskdef任务必须在fx:deploy任务之前执行。 classpath属性包含来自JDK的ant-javafx.jar文件的位置和包含自定义资源的目录。对于动态树演示,classpath属性包括包含自定义图标的/src目录。
将fx:deploy任务放置在所需的目标内。指定原生二进制文件所放置的输出目录,并指定要生成的原生二进制文件。
如果对原生二进制文件指定了all,则会生成在执行此任务文件的平台上的所有可能二进制文件,包括磁盘映像。所有平台的有效值为all;image,在Windows和Linux上生成文件目录,在OSX上生成.app文件;以及installer,仅生成可安装包,不包括磁盘映像。平台特定二进制文件的有效值为Windows的exe和msi;Linux的deb和rpm;OS X的deb、pkg和mac.appStore。您必须安装所需的工具来构建您选择的二进制文件。
对于动态树演示,outdir属性设置为${basedir}/build/packager。basedir在project元素中定义,此处设置为当前目录。nativeBundles属性设置为all,以便在运行打包任务的平台上构建所有格式的二进制文件。
verbose属性是可选的。使用此属性提供诊断信息。
提供有关应用程序的信息。在fx:application元素的name属性和fx:info元素的title属性中设置应用程序的名称。在fx:application元素的version属性中设置应用程序的版本。使用fx:info元素提供应用程序的描述、供应商名称、许可信息和其他元数据。
关于JAR文件和其他资源的信息设置在fx:resources元素中。
启动信息设置在fx:application元素的mainclass属性中。
对于动态树演示,使用简单的单一启动器webstartComponentArch.DynamicTreeApplication,它是应用程序的主类。
其他平台特定的自定义设置在fx:bundleArgument元素中提供。未被打包程序识别的参数将被忽略,因此一个构建文件可以包含所有平台的打包信息。
对于动态树演示,应用了以下自定义设置:
dynamic-tree-demo。Java Tree Demo。Java Demos。运行你为自包含应用程序构建捆绑包创建的打包任务。
对于Dynamic Tree Demo,从项目的根目录运行以下命令:
ant package
当打包任务完成时,应用程序项目中的build/packager/bundles目录将包含生成的本机二进制文件。
下面的示例显示了生成Windows自包含捆绑包后Dynamic Tree Demo项目的目录结构:
/packager_DynamicTreeDemo <--- 应用程序项目
/build
/packager
/bundles
Dynamic Tree Demo <---文件夹图像
Dynamic Tree Demo-1.0.exe <---EXE安装程序
Dynamic Tree Demo-1.0.msi <---MSI安装程序
...
/dist
DynamicTreeDemo.jar
...
/src
/package <--- 自定义资源
/linux
/macosx
/windows
/webstartComponentArch <--- 应用程序源文件
...
请注意,除了自包含捆绑包外,打包工具还会始终为应用程序生成JAR、JNLP和HTML文件。这些文件提供了分发应用程序的其他选项。
有关自包含应用程序的更多信息,请参阅自包含应用程序打包。
有关Java打包工具的Ant任务的更多信息,请参阅