# 转换现有应用程序

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/selfContainedApps/converting.html](https://docs.oracle.com/javase/tutorial/deployment/selfContainedApps/converting.html)

任何独立的 Java 应用程序或 Java Web Start 应用程序都可以打包为独立的应用程序。如果您有 Java applet，请参阅[将 Java Applet 重写为 Java Web Start 应用程序](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/applet_dev_guide.html#JSDPG1036)，以获取有关将 applet 转换为 Java Web Start 应用程序的信息，然后将其打包为一个独立的应用程序。

在转换应用程序之前，请确保为您的平台安装了必需的先决条件。有关信息，请参阅[打包自包含应用程序的先决条件](../selfContainedApps/prereqs.html)。

本节将动态树演示从[部署 Java Web Start 应用程序](../webstart/deploying.html)转换为自包含应用程序。您可以从[自包含应用程序示例](../selfContainedApps/examplesIndex.html)下载此演示的源文件。

## 设置目录

识别并组织应用程序所需的文件。一个简单的应用程序可能只需要一个 JAR 文件。更复杂的应用程序可能还需要其他库或资源。自包含应用程序也可以使用自定义资源（如图标或配置文件）。

动态树演示仅需要`DynamicTreeDemo.jar`文件，该文件位于项目的`/dist`目录中。不需要 Java Web Start 版本的应用程序所需的 HTML 和 JNLP 文件，并且捆绑包会忽略自包含应用程序。

要为动态树演示提供自定义图标（表示应用程序安装在用户桌面上时），将为每个支持的平台提供一个图标。这些图标放在 `/ src / package / `平台`` 目录中。每个支持的平台都以不同的格式提供图标：Windows 的`.ico`格式，Linux 的`.png`格式和 OS X 的`.icns`格式。

以下示例显示了在创建自包含 bundle 之前 Dynamic Tree Demo 项目的目录结构：

```
/packager_DynamicTreeDemo     <--- application project
   /dist
      DynamicTreeDemo.jar
      ...
   /src
      /package                <--- custom resources
         /linux
         /macosx
         /windows
      /webstartComponentArch  <--- application source files
      ...

```

## 设置构建文件

为所需的打包任务设置 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="Dynamic Tree Demo"
                        mainClass="webstartComponentArch.DynamicTreeApplication"
                        version="1.0"
            />

            <fx:resources>
                <fx:fileset dir="dist" includes="DynamicTreeDemo.jar"/>
            </fx:resources>

            <fx:info title="Dynamic Tree Demo"
                     vendor="My Company"
                     description="A Demo of a Dynamic Swing Tree"
                     category="Demos"
                     copyright="(c) 2014 My Company"
                     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 Tree Demo"/>
            <fx:bundleArgument arg="win.menuGroup" value="Java Demos"/>

        </fx:deploy>
    </target>
</project>

```

使用以下信息设置 Ant 任务：

*   使用`xmlns:fx="javafx:com.sun.javafx.tools.ant`作为命名空间。

*   必须在`fx:deploy`任务之前执行`taskdef`任务。 `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`属性中设置。

    对于 Dynamic Tree Demo，使用了一个简单的单个启动器，`webstartComponentArch.DynamicTreeApplication`，它是应用程序的主类。

*   `fx:bundleArgument`元素中提供了其他特定于平台的自定义。忽略捆绑程序无法识别的参数，因此一个构建文件可以包含所有平台的打包信息。

    对于动态树演示，将应用以下自定义：

    *   Linux 的软件包名称设置为`dynamic-tree-demo`。
    *   提供电子邮件地址。
    *   OS X 菜单栏中显示的名称设置为`Java Tree Demo`。
    *   为 Windows 存储应用程序的菜单组的名称设置为`Java Demos`。

## 生成捆绑包

运行您在要为自包含应用程序构建捆绑包的平台上创建的打包任务。

对于 Dynamic Tree Demo，从项目的根文件夹运行以下命令：

```
     ant package

```

打包任务完成后，应用程序项目中的`build/packager/bundles`目录包含生成的本机二进制文件。

以下示例显示了为 Windows 生成自包含捆绑包后 Dynamic Tree Demo 项目的目录结构：

```
/packager_DynamicTreeDemo     <--- application project
   /build
      /packager
         /bundles
            Dynamic Tree Demo         <---folder image
            Dynamic Tree Demo-1.0.exe <---EXE installer
            Dynamic Tree Demo-1.0.msi <---MSI installer
      ...   
   /dist
      DynamicTreeDemo.jar
      ...
   /src
      /package                <--- custom resources
         /linux
         /macosx
         /windows
      /webstartComponentArch  <--- application source files
      ...

```

请注意，除了自包含的包之外，打包工具始终为应用程序生成 JAR，JNLP 和 HTML 文件。这些文件提供了分发应用程序的其他选项。

## 其他参考文献

有关自包含应用程序的更多信息，请参阅[自包含应用程序打包](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html)。

有关 Java 打包工具的 Ant 任务的更多信息，请参阅 &lt;macroinline&gt;[JavaFX Ant 任务](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/javafx_ant_tasks.html)，它们用于 Java 和 JavaFX 应用程序。&lt;/macroinline&gt;