这些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任务的更多信息,请参阅