// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= NetBeans IDE 中的本机打包
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 中的本机打包 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的本机打包

作者：Petr Somol 和 Alyona Stashkova

本机打包首次作为 JavaFX 2.2 SDK 的一部分引入，使您能够将应用程序打包为_本机包_，然后安装并运行应用程序，而对系统 JRE 或 JavaFX SDK 没有任何外部依赖关系。接下来，它也变得对 Java SE 项目可用。

本机打包不更改应用程序的部署模型：它将应用程序原样与 Java 运行时打包在一起，并生成您正在使用的操作系统通用的安装程序。关键是使整个操作都独立于用户在目标计算机上具有或不具有的任何 Java 运行时。您可以采用这样一个安装程序并将其运行在无 Java 跟踪的计算机上，该安装程序将同时安装应用程序和所需的 Java 运行时位。此类安装程序的大小非常大，因为即使是一个 "Hello world" 应用程序，自身就会带有大部分的 Java 运行时工件。

在本教程中，您将基于随 IDE 捆绑提供的样例应用程序，为 Java SE 应用程序创建  ``EXE``  安装程序，并为 Windows 操作系统的 JavaFX 应用程序创建  ``MSI``  安装程序。

*注：*

* 您获得的  ``EXE``  和  ``MSI``  安装程序是特定于平台的，它们只在与目标 Java 平台（已为其创建  ``EXE`` / ``MSI``  可安装包）兼容的系统上运行。（例如，如果已在安装了 64 位 JDK 的计算机上创建  ``EXE``  或  ``MSI``  安装程序，则必须在安装了 64 位 Windows 的计算机上运行该安装程序。）

*目录*

image::images/netbeans-stamp-80-74.png[title="此页上的内容适用于 NetBeans IDE 7.4 或 8.0"]


*要学习本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|link:http://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.4 或 8.0 

|link:http://www.oracle.com/technetwork/java/javafx/downloads/index.html[+Java 开发工具包 (JDK)+] |7 update 25（或更高版本）或 8 

|link:http://www.jrsoftware.org/[+Inno Setup+] |5.5 或更高版本 

|link:http://wixtoolset.org/[+WiX+] |3.7 或更高版本 
|===


== 将所需工具安装并添加到路径中

要使用 IDE 对本机打包的支持，需要安装以下附加工具：

* 需要用于在 Windows 上生成 EXE 安装程序的 link:http://www.jrsoftware.org/[+Inno Setup 5.5+]（或更高版本）。
* 需要用于在 Windows 上生成 MSI 安装程序的 link:http://wixtoolset.org/[+WiX 3.7+]（或更高版本）。

*注：*有关为不同平台生成安装程序所需的工具的列表，请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG2508[+将应用程序打包为本机安装程序+]。

*要安装 Inno Setup，请执行以下操作：*

1. 从 link:http://www.jrsoftware.org/isdl.php[+Inno Setup 下载+]页下载  ``ispack-5.5.3.exe`` 。
2. 双击此文件以启动安装程序。
3. 接受 Inno Setup 许可证协议，然后单击“下一步”。
4. 按照安装向导中的说明安装 Inno Setup。

*安装 WiX：*

1. 从 link:http://wix.codeplex.com/releases/view/99514[+WiX 工具集 - 下载+]页下载  ``wix37.exe`` 。
2. 双击此文件以启动安装程序。
3. 按照安装向导中的说明安装 WiX。

*要将 Inno Setup 和/或 WiX 添加到系统 Path 变量中，请执行以下操作：*

1. 在 Windows 7 上，选择“开始”>“计算机”>“系统属性”>“高级系统设置”。
2. 选择“高级”标签，然后单击“环境变量”按钮。
3. 在“系统变量”窗格中，双击 Path 变量。
4. 在“编辑系统变量”对话框中，向“变量值”字段中添加一个分号并后跟新路径（例如  ``C:\Program Files (x86)\Inno Setup 5 ``  或  ``C:\Program Files (x86)\WiX Toolset v3.6\bin`` ）。
5. 单击“确定”以关闭打开的所有对话框。

*注：*

* 要检查安装的工具是否位于路径中，请打开 "Command Prompt"（命令提示）窗口，然后为 Inno Setup 键入  ``iscc.exe`` ，并为 WiX 键入  ``candle.exe`` 。（如果 "Command Prompt"（命令提示）立即关闭，请尝试分别指定  ``cmd.exe /c cmd.exe /k iscc.exe``  或  ``cmd.exe /c cmd.exe /k candle.exe`` 。）
下图显示将 Inno Setup 添加到系统 Path 变量中时 "Command Prompt"（命令提示）应显示的内容。

[.feature]
--
image::images/cmd_small.png[role="left", link="images/cmd.png"]
--

* 确保在将工具添加到系统 Path 变量中之后重新启动 IDE。


== Java SE 项目中的本机打包

要利用 IDE 中的本机打包支持，您需要完成以下操作：

* <<createse,创建 IDE 项目>>
* <<enable,在项目中启用本机打包操作>>
* <<buildse,清理并构建项目>>
* <<instse,在安装程序中打包应用程序>>


=== 设置 Java SE 项目

在安装程序中打包应用程序之前，需要创建应用程序自身。

您将使用 NetBeans IDE 附带的 Anagram Game 示例创建一个新的 Java SE 项目。

*要创建 IDE 项目，请执行以下操作：*

1. 在 IDE 中，选择 "File"（文件）> "New Project"（新建项目）。
2. 在 "New Project"（新建项目）向导中，展开 "Samples"（样例）类别并选择 "Java"。
3. 在 "Projects"（项目）列表中选择 "Anagram Game"。然后，单击 "Next"（下一步）。

[.feature]
--
image::images/new_javase_prj_small.png[role="left", link="images/new_javase_prj.png"]
--


[start=4]
. 在 "Name and Location"（名称和位置）面板中，保留 "Project Name"（项目名称）和 "Project Location"（项目位置）字段的默认值。

[start=5]
. 单击 "Finish"（完成）。
IDE 将创建并打开 Java SE 项目。

要测试创建的项目是否正常运行，请通过从主菜单中选择 "Run"（运行）> "Run Project"（运行项目）来运行该项目。
Anagrams 应用程序应启动并显示在您的计算机上。

image::images/anagrams.png[]


=== 在 IDE 中启用本机打包

默认情况下，在 IDE 中禁用本机打包操作。

在 "Projects"（项目）窗口中右键单击 "AnagramGame" 项目以检查可用于 IDE 中创建的 Java SE 项目的操作：在项目的上下文菜单中不存在包相关的操作。

image::images/context_wo_pkg.png[]

*要为项目启用本机打包操作，请执行以下操作：*

1. 在 "Projects"（项目）窗口中右键单击项目节点，然后从上下文菜单中选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Deployment"（部署）类别，然后选择 "Enable Native Packaging Actions in Project Menu"（在项目菜单中启用本机打包操作）选项。

[.feature]
--
image::images/enable_native_pkg_small.png[role="left", link="images/enable_native_pkg.png"]
--


[start=3]
. 单击 "OK"（确定）。
包将作为命令添加到项目的上下文菜单中。

image::images/pkg_enabled.png[]


=== 构建应用程序

现在将清理并构建应用程序以进行部署。

*要清理并构建项目，请执行以下操作：*

* 从主菜单中选择 "Run"（运行）> "Clean and Build Project"（清理并构建项目）。
IDE 将在 "Output"（输出）窗口中显示结果。

[.feature]
--
image::images/output_small.png[role="left", link="images/output.png"]
--

将在项目文件夹中创建包含  ``jar``  文件的  ``dist``  文件夹。


=== 生成  ``EXE``  安装程序

现在可在 Windows 的安装程序中打包应用程序。

*要构建  ``EXE``  安装程序，请执行以下操作：*

* 右键单击 "AnagramGame" 项目，然后从上下文菜单中选择 "Package as"（打包为）> "EXE Installer"（EXE 安装程序）。

*注：*只有在 Inno Setup <<tool,安装并添加到系统 Path 变量中>>时，IDE 才会创建  ``EXE``  安装程序。

IDE 将在 "Output"（输出）窗口中显示打包过程的进度和结果。

[.feature]
--
image::images/output_se_exe_small.png[role="left", link="images/output_se_exe.png"]
--

*注：*IDE 会首先记录一些进度，然后会有一段时间看起来什么都没有发生，这实际上是 Inno Setup 在后台工作的时段。打包需要一些时间才能完成。

在  ``EXE``  安装程序就绪后，它将置于  ``AnagramGame/dist/bundles/``  目录中。

image::images/anagram_exe.png[]


== JavaFX 项目中自包含的应用程序打包

要使用 IDE 中的本机打包支持构建可安装的 JavaFX 应用程序，您需要完成以下操作：

* <<createfx,在 IDE 中创建 JavaFX 项目>>
* <<enablefx,为项目启用本机打包支持>>
* <<buildfx,清理并构建 JavaFX 应用程序>>
* <<instfx,构建可安装的 JavaFX 应用程序>>


=== 创建 JavaFX 项目

首先，使用随 IDE 捆绑提供的 BrickBreaker 样例项目创建 JavaFX 项目。

*要在 IDE 中创建 JavaFX 项目，请执行以下操作：*

1. 在 IDE 中，选择 "File"（文件）> "New Project"（新建项目）。
2. 在 "New Project"（新建项目）向导中，展开 "Samples"（样例）类别并选择 "JavaFX"。
3. 在 "Projects"（项目）列表中选择 "BrickBreaker"。然后，单击 "Next"（下一步）。
4. 在 "Name and Location"（名称和位置）面板中，保留 "Project Name"（项目名称）、"Project Location"（项目位置）和 "JavaFX Platform"（JavaFX 平台）字段的默认值。

[.feature]
--
image::images/new_javafx_prj_small.png[role="left", link="images/new_javafx_prj.png"]
--


[start=5]
. 单击 "Finish"（完成）。
BrickBreaker JavaFX 项目将显示在 IDE 的 "Projects"（项目）窗口中。

要测试创建的项目是否正常运行，请通过从主菜单中选择 "Run"（运行）> "Run Project (BrickBreaker)"（运行项目 (BrickBreaker)）来运行该项目。
Brick Breaker 应用程序应启动并显示在您的计算机上。

[.feature]
--
image::images/brickbreaker_small.png[role="left", link="images/brickbreaker.png"]
--


=== 在项目中启用本机打包

要将 IDE 中的本机打包支持用于项目，您首先需要启用它。

如果右键单击 "Brick Breaker" 项目，您不会在该项目中看到本机打包相关的操作。

image::images/javafx_wo_pkg.png[]

*要在项目上下文菜单中启用本机打包操作，请执行以下操作：*

1. 在 "Projects"（项目）窗口中右键单击项目节点，然后从上下文菜单中选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Build"（构建）类别中的 "Deployment"（部署），然后选择 "Enable Native Packaging"（启用本机打包）选项。

[.feature]
--
image::images/enable_native_pkg_fx_small.png[role="left", link="images/enable_native_pkg_fx.png"]
--


[start=3]
. 单击 "OK"（确定）。
包将作为项添加到项目的上下文菜单中。

image::images/pkg_fx_enabled.png[]


=== 构建应用程序

现在即可清理并构建 JavaFX 应用程序。

*要清理并构建项目，请执行以下操作：*

* 从主菜单中选择 "Run"（运行）> "Clean and Build Project"（清理并构建项目）。
IDE 将在 "Output"（输出）窗口中显示结果。

*注：*如果构建成功，但 IDE 在 "Output"（输出）窗口中显示  ``warning: [options] bootstrap class path not set in conjunction with -source 1.6`` （警告：[选项] 未结合 -source 1.6 设置引导类路径），则需要在项目属性中将源代码/二进制格式设置为 JDK 8，并且需要再次清理并构建项目，如下所示：

1. 在 "Projects"（项目）窗口中右键单击 "BrickBreaker" 项目，然后选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Sources"（源）类别。
3. 将源代码/二进制格式设置为 "JDK 8"，然后单击 "OK"（确定）。
4. 在 "Projects"（项目）窗口中右键单击 "BrickBreaker"，然后从上下文菜单中选择 "Clean and Build"（清理并构建）。


=== 生成  ``MSI``  安装程序

现在即可将应用程序包装到 Windows 特定的可安装包中。

*要构建  ``MSI``  安装程序，请执行以下操作：*

* 右键单击 "BrickBreaker" 项目，然后从上下文菜单中选择 "Package as"（打包为）> "MSI Installer"（MSI 安装程序）。

*注：*只有在 WiX <<tool,安装并添加到系统 Path 变量中>>时，IDE 才会创建  ``MSI``  安装程序。

IDE 将在 "Output"（输出）窗口中显示打包过程的进度和结果。

[.feature]
--
image::images/output_fx_msi_small.png[role="left", link="images/output_fx_msi.png"]
--

*注：*IDE 会首先记录一些进度，然后会有一段时间看起来什么都没有发生，这实际上是 WiX 在后台工作的时段。打包需要一些时间才能完成。

可安装的 JavaFX 应用程序位于  ``BrickBreaker/dist/bundles/``  目录中。

image::images/brickbreaker_msi.png[]


== [[验证可安装的应用程序]] 

在  ``AnagramGame-1.0.exe``  和  ``BrickBreaker-1.0.msi``  安装程序完成后，您需要检查将 Anagram 和 BrickBreaker 应用程序本机安装到的目录。

*要检查安装程序，请执行以下操作：*

1. 浏览至硬盘驱动器上的安装文件（ ``AnagramGame-1.0.exe``  或  ``BrickBreaker-1.0.msi`` ）。
2. 双击以运行安装程序。

两个应用程序都应安装到  ``C:\Users\<username>\AppData\Local\``  目录中，并且在“开始”菜单中可用。


== 另请参见

* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG2508[+将应用程序打包为本机安装程序+]
* link:http://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm[+部署 JavaFX 应用程序：自包含的应用程序打包+]
* link:http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html[+在 Mac 上打包 Java 应用程序以进行分发+]
link:/about/contact_form.html?to=3&subject=Feedback:%20Native%20Packaging%20In%20NetBeans%20IDE[+发送有关此教程的反馈意见+]


link:../../trails/matisse.html[+返回至学习资源+]

