blob: d580f762c3263bd0a1069326e00428f2b4cec734 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Platform Installer Tutorial</title>
<link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
<meta name="AUDIENCE" content="NBUSER"/>
<meta name="TYPE" content="ARTICLE"/>
<meta name="EXPIRES" content="N"/>
<meta name="indexed" content="y"/>
<meta name="description"
content="A short guide to getting started with the NetBeans Platform Installer."/>
<!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
<!-- Use is subject to license terms.-->
</head>
<body>
<h1>NetBeans Platform Installer Integration Tutorial</h1>
<p>In this tutorial, you learn how to use the infrastructure of the
NetBeans IDE installer to generate and customize an
installer for your own NetBeans Platform application.</p>
<p><img src="../images/articles/74/netbeans_stamp_74_73_72.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 7.3" title="Content on this page applies to NetBeans IDE 7.3"/></p>
<p><b>Contents</b></p>
<ul class="toc">
<li><a href="#generating">Generating and Using the Default Installer</a></li>
<li><a href="#customizing">Customizing the Installation Wizard</a></li>
<li><a href="#bundling">Bundling Additional Resources</a>
<ul>
<li><a href="#bundling-glassfish">Bundling GlassFish</a></li>
<li><a href="#bundling-jre">Bundling the JRE</a></li>
</ul>
</li>
</ul>
<p><b>Background Reading</b></p>
<p>This tutorial is derived from the following sources:</p>
<ul>
<li><a href="http://wiki.netbeans.org/NBI">http://wiki.netbeans.org/NBI</a></li>
<li><a href="http://installer.netbeans.org/docs/nbi-devguide.html">http://installer.netbeans.org/docs/nbi-devguide.html</a></li>
</ul>
<p><b>To follow this tutorial, you need the software and resources listed in the following table.</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Software or Resource</th>
<th class="tblheader" scope="col">Version Required</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">version 7.2.1 or above</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
<td class="tbltd1">version 7 or above</td>
</tr>
</tbody>
</table>
<!-- ===================================================================================== -->
<p></p>
<h2><a name="generating"></a>Generating and Using the Default Installer</h2>
<p>In this section, you set up the Paint Application, which is one
of the sample applications distributed with NetBeans IDE,
and generate the default NetBeans installer for it.</p>
<div class="indent">
<h3 class="tutorial">Generating the Default Installer</h3>
<div class="indent">
<ol>
<li><p>Go to File | New Project and go to Samples | NetBeans Modules,
where you will find the Paint Application:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-1.png" alt="1"/></p>
<p>Complete the wizard and you should see the Paint Application in the Projects window.</p>
</li>
<li><p>Right-click the application, choose Properties, and then go to the Installer tab.
Select the operating systems for which you'd like to create installers, as
shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-2.png" alt="1"/></p>
<p>Specify whether you want to compress the installer and then click OK.</p>
</li>
<li><p>Right-click the application and choose Package as | Installers, as
shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-3.png" alt="1"/></p>
<p class="notes"><b>Note:</b> The process that creates installers
can take a long time, especially if you specified that multiple
installers should be created. Use the Output window to follow
the creation process.</p>
</li>
<li><p>Switch to the Files window, expand the application's "dist" folder,
and you should see one or more installers that have been generated,
together with a ZIP distribution of the application:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-4.png" alt="1"/></p>
</li>
</ol>
</div>
<h3 class="tutorial">Using the Default Installer</h3>
<div class="indent">
<ol>
<li><p>Right-click the installer and choose "Open in System", as shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-5.png" alt="1"/></p>
<p class="tips">Alternatively, if the above instruction does
not work in your operating system, leave NetBeans IDE, go into your filesystem outside the IDE,
and launch the installer in the standard way applicable
to your operating system.</p>
</li>
<li><p>After a moment, you should see the first panel of the installer wizard, as shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-6.png" alt="1"/></p>
<p>Click Next.</p>
</li>
<li><p>In the second panel, specify a location where the application will be installed,
together with whether a desktop icon and a start menu entry should be created:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-7.png" alt="1"/></p>
<p>Click Next.</p>
</li>
<li><p>In the third panel, you are shown a summary prior to the installation starting:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-8.png" alt="1"/></p>
<br/>
<p>Click Install. You are shown the progression of the installation procedure:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-9.png" alt="1"/></p>
<br/>
<p>When the installation is complete, the panel below is shown:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/paint-app-1a.png" alt="1"/></p>
</li>
</ol>
</div>
</div>
<p>Now that you have learned how to create and use the default installer, let's customize it!</p>
<!-- ===================================================================================== -->
<p></p>
<h2><a name="customizing"></a>Customizing the Installation Wizard</h2>
<p>In this section, you configure the NetBeans Installation (nbi) infrastructure
in various ways. Then, when you generate the installer again, as shown in
the previous section, your configurations will automatically be applied.
The nbi infrastructure is a standard part of every
NetBeans IDE installation, as shown
in the screenshot below, and is always found within the NetBeans IDE installation
directory's "harness" subdirectory:
</p>
<p><img style="border: 1px solid" src="../images/tutorials/nbi/721/favorites-view.png" alt="Favorites"/></p>
<p>Below, you are shown how to change the installer's
images, texts, size, destination directory, and panels. After you make a change, regenerate
the installer to see the impact of your changes.</p>
<div class="indent">
<h3 class="tutorial">Customizing the Wizard Images</h3>
<div class="indent">
<ol>
<li><p>In the "harness/nbi" folder, go to "stub/ext/engine", which is the folder shown
in the screenshot below. Then continue expanding the folders until
you find the images shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/customize-icons-1.png" alt="1"/></p>
</li>
<li><p>Replace the images with your own images and then generate the installer again,
following the instructions in the previous section.</p>
</li>
</ol>
</div>
</div>
<div class="indent">
<h3 class="tutorial">Customizing the Wizard Texts</h3>
<div class="indent">
<ol>
<li><p>In the "harness/nbi" folder, go to "stub/ext/engine", which is the folder shown
in the screenshot below. Then continue expanding the folders until
you find the <tt>Bundle.properties</tt> file shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/customize-texts-1.png" alt="1"/></p>
</li>
<li><p>Replace the texts with your own and then regenerate the installer,
which is explained in the previous section.</p>
</li>
</ol>
</div>
</div>
<div class="indent">
<h3 class="tutorial">Customizing the Wizard Size</h3>
<div class="indent">
<ol>
<li><p>In the "harness/nbi" folder, go to "stub/ext/engine", which is the folder shown
in the screenshot below. Then continue expanding the folders until
you find the <tt>engine.properties</tt> file shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/customize-sizes-1.png" alt="1"/></p>
</li>
<li><p>Replace the sizes with your own and then regenerate the installer,
which is explained in the previous section.</p>
</li>
</ol>
</div>
</div>
<div class="indent">
<h3 class="tutorial">Customizing the Wizard Destination Directory</h3>
<div class="indent">
<ol>
<li><p>In the "harness/nbi" folder, go to "stub/ext/infra", which is the folder shown
in the screenshot below. Then continue expanding the folders until
you find the <tt>build.properties</tt> file shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/customize-destinationdir-1.png" alt="1"/></p>
</li>
<li><p>Replace the values of the <tt>product.properties</tt> keys with
your own and then regenerate the installer,
which is explained in the previous section.</p>
</li>
</ol>
</div>
</div>
<div class="indent">
<h3 class="tutorial">Customizing the Wizard Panels</h3>
<div class="indent">
<ol>
<li><p>In the "harness/nbi" folder, go to "stub/ext/components", which is the folder shown
in the screenshot below. Then continue expanding the folders until
you find the <tt>HelloWorldPanel.java</tt> and the <tt>wizard.xml</tt> file shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/customize-panels-1.png" alt="1"/></p>
</li>
<li><p>Create new panels and register them
in the <tt>wizard.xml</tt> file or
unregister panels by removing their
registration entries found in the <tt>wizard.xml</tt> file.</p>
</li>
</ol>
</div>
</div>
<p>Now that you have learned how to customize the default installer, let's add additional resources to it!</p>
<!-- ===================================================================================== -->
<p></p>
<h2><a name="bundling"></a>Bundling Additional Resources</h2>
<p>In this section, you learn how to bundle additional resources
together with your installer.</p>
<div class="indent">
<h3 class="tutorial"><a name="bundling-glassfish"></a>Bundling GlassFish</h3>
<p>Some NetBeans Platform applications use GlassFish in one way or another. Using
the instructions below, you can bundle GlassFish with your installer and
add a new panel to the installer wizard so that users can specify where
and how GlassFish should be installed.</p>
<p class="tips">These instructions can be applied to
any other tool or application that should be bundled and installed together with
your NetBeans Platform application&ndash;simply replace each instance of "GlassFish"
below with the name of the tool or application you'd like to bundle with
the installer of your NetBeans Platform application.</p>
<div class="indent">
<ol>
<li><p>Start by creating a ZIP file of
your installation of GlassFish. Somewhere on disk,
you should have GlassFish installed. Remove any domain folders
you have there, since the procedure that follows will result in
a "domain1" domain automatically being created at the time when the
installer finished.</p>
<p class="notes"><b>Note:</b> If you have some custom libraries
that GlassFish will need, simply include them in the appropriate
folders in GlassFish before you ZIP it up. That means you'll be
providing a custom GlassFish distribution
tailor made for the application you've created. Otherwise,
ZIP up the default standard GlassFish distribution and the user will have
that when they complete the installer.</p>
<p>Put the ZIP file anywhere on disk, such as in the home directory. Later,
your ZIP file
will be located by the nbi infrastructure,
unzipped, and packed into the installer, once you choose
"Package as | Installers" in the IDE.</p>
</li>
<li><p>In the <tt>components</tt> folder and the <tt>infra</tt> folder,
find the <tt>helloworld</tt> folders, shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/bundle-glassfish-1.png" alt="1"/></p>
<p>Copy the <tt>helloworld</tt> folders, one by one, and paste them in
the same folders where the <tt>helloworld</tt> folders are found. Name
both new folders <tt>glassfish</tt>, as shown below:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/bundle-glassfish-2.png" alt="1"/></p>
<p class="tips"> Depending on the operating system you're using,
make sure you have write permission for the folders into which
you're copying, otherwise
you will not be able to complete the copy action. To fix this,
go outside the IDE to the folder in your filesystem and fix
the permissions set on the folder so that you have write permission.</p>
</li>
<li><p>In <tt>nbi/build.xml</tt>, include <tt>glassfish</tt> in the <tt>-clean</tt>
and <tt>-build</tt> targets. Do this by copying the <tt>helloworld</tt>
equivalents and replacing <tt>helloworld</tt> references with <tt>glassfish</tt>
references. In the same file, change <tt>create-bundle</tt> so that <tt>glassfish</tt>
is included, as highlighted below:</p>
<pre class="examplecode">&lt;create-bundle root="${output.dir}/registry-temp"
platform="${platform}"
target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}"&gt;
&lt;component uid="${main.product.uid}" version="1.0.0.0.0"/&gt;
<b>&lt;component uid="glassfish" version="1.0.0.0.0"/&gt;</b>
&lt;/create-bundle&gt;</pre>
</li>
<li><p>In <tt>nbi/stub/ext/infra/products/glassfish</tt>, open
<tt>build.properties</tt> and change the value
of <tt>product.data.1.path</tt> so that it points to
the location on disk of your GlassFish ZIP file. In the
same file, change the value of <tt>product.uid</tt> to <tt>glassfish</tt>.</p>
</li>
</ol>
</div>
<p>When you regenerate the installer,
as explained in the previous section, your GlassFish
ZIP file will be included in the installer. When you
run the installer, a new panel will be shown for
installing GlassFish. When the wizard is complete,
GlassFish will be installed, together with the application.</p>
<h3 class="tutorial"><a name="bundling-jre"></a>Bundling the JRE</h3>
<P>In many cases, the users of your NetBeans Platform application
may not have a Java runtime environment (JRE) installed on their system. As a result,
they will not be able to start your NetBeans Platform application, in fact, they
will not even be able to start your installer, and will need to
download and configure the JRE manually. To help your users, you can bundle the JRE
with the installer and create the installer and the NetBeans Platform
application in such a way that they
will automatically use the bundled JRE when starting up.</P>
<p class="notes"><b>Note:</b> The instructions below apply to Windows.
For Unix systems, refer to <a href="http://netbeans.dzone.com/including-jre-in-nbi">Including the JRE in a NetBeans Platform Installer on Ubuntu Linux</a>.</p>
<div class="indent">
<p><b>Preparing the JRE</b></p>
<div class="indent">
<ol>
<li><p>Go to your JDK installation and copy the JRE somewhere else,
separately, so that you
don't accidentally destroy the JDK you're using to run Java programs,
such as NetBeans IDE. For purposes of this
tutorial, we will copy the folder "jre", from the JDK,
to a new folder named &quot;C:\AJava&quot;:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/bundle-jre-1.png" alt="1"/></p>
</li>
<li>The <tt>C:\\AJava\jre\lib\rt.jar</tt> is large. In this step, we're going
to replace <tt>rt.jar</tt> with a compressed version of
the same JAR. Go to C:\\AJava\jre\lib and run:
<pre>pack200 -J-Xmx1024m rt.jar.pack.gz rt.jar</pre>
<p>Now go into C:\\AJava\jre\lib and delete the &quot;rt.jar&quot;.
</p>
</li>
<li>Go to C:\\AJava\jre and select the &quot;bin&quot; folder and the &quot;lib&quot; folder. Right-click and ZIP the selected folders. You'll end up with &quot;jre.zip&quot;.
</li>
<li>Put "unzipsfx.exe", <a href="http://www.info-zip.org/pub/infozip/">which can
you get here</a> or <a href="http://wiki.netbeans.org/DevFaqAccessSourcesUsingMercurial">by
downloading the NetBeans sources</a> and then looking in the
&quot;nbi/infra/build/jvm/tools/unzipsfx&quot; folder,
into the same folder as where the "jre.zip" is found. Then, in the folder
where "unzipsfx.exe" and "jre.zip" are found, run this:
<pre>copy /B unzipsfx.exe + jre.zip jre.exe</pre>
<p>The result of the above is that you now have a &quot;jre.exe&quot; file, which is a self-extractable
ZIP archive. To try it out,
run it and then you'll find the &quot;jre&quot; installed
on your system. We now need to bundle this "jre.exe" into the installer, via the Ant
script that configures the installer, as outlined in the steps that follow.
</p>
</li>
</ol>
</div>
<p><b>Configuring the NetBeans Installer Infrastructure</b></p>
<div class="indent">
<ol>
<li>Replace &quot;create-bundle&quot; in the "build.xml"
found in the IDE's &quot;harness/nbi/stub&quot; folder with the following:
<pre class="examplecode">&lt;create-bundle root="${output.dir}/registry-temp" platform="${platform}"
target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}"&gt;
&lt;component uid="${main.product.uid}" version="1.0.0.0.0"/&gt;
<b>&lt;property name="nbi.bundled.jvm.file" value="C:\\AJava\jre\jre.exe"/&gt;</b>
&lt;/create-bundle&gt;</pre>
<p class="tips"> Depending on the operating system you're using,
make sure you have write permission for the above file, otherwise
you will not be able to make changes to it. To fix this,
go outside the IDE to the file in your filesystem and fix
the permissions set on the file so that you have write permission.</p>
</li>
<li>Put this right at the end of &quot;install(Progress progress)&quot; in ConfigurationLogic.java, which is within &quot;harness/nbi/stub/ext/components/products/helloworld/src/org/mycompany&quot;:
<pre>File javaHome = new File(System.getProperty("java.home"));
File target = new File(installLocation, "jre");
try {
FileUtils.copyFile(javaHome, target, true); //FileUtils is one of the NBI core classes, already imported
} catch (IOException e) {
throw new InstallationException("Cannot copy JRE",e);
}
// to add uninstaller logic:
SystemUtils.getNativeUtils().addUninstallerJVM(new LauncherResource(false, target));</pre>
<p>And, in the &quot;uninstall(Progress progress)&quot; method, add this right before the last statement:
</p>
<pre>File jre = new File(installLocation, "jre");
if (jre.exists()) {
try {
for (File file : FileUtils.listFiles(jre).toList()) {
FileUtils.deleteOnExit(file);
}
FileUtils.deleteOnExit(installLocation);
} catch (IOException e) {
//ignore
}
}</pre>
<p>Add this to the import statement section at the top of the file:</p>
<pre>import org.netbeans.installer.utils.system.launchers.LauncherResource;</pre>
<p class="notes"><b>Note:</b> You will see compilation errors, i.e., red error marks,
throughout the code. That is because you have not opened the code
as projects into the IDE. Don't worry, the code will compile once
you regenerate the installer later in this tutorial.</p>
<p class="tips"> Depending on the operating system you're using,
make sure you have write permission for the above file, otherwise
you will not be able to make changes to it. To fix this,
go outside the IDE to the file in your filesystem and fix
the permissions set on the file so that you have write permission.</p>
<p>You have now specified how and when the &quot;jre&quot; will be installed by the installer wizard.
</p>
</li>
</ol>
</div>
<p><b>Configuring the NetBeans Platform Application to Use the Bundled JRE</b></p>
<div class="indent">
<ol>
<li><p>In your application, e.g., in &quot;nbproject&quot; of your application,
create a &quot;.conf&quot; file with. For example, for purposes of this
tutorial, switch to the Files window, right-click on the Paint Application's
"nbproject" folder, and choose New | Other and then select
Other | Empty File. Click Next, type "paintit.conf", and click Finish.
You should now see this:</p>
<br/>
<p><img src="../images/tutorials/nbi/721/bundle-jre-2.png" alt="1"/></p>
</li>
<li><p>Paste the content below into the <tt>paintit.conf</tt> file.
As you can see below,
you need to make sure that the <tt>jdkhome</tt> key has its value set to
"jre", which is the folder relative to the installation directory where
your bundled JRE will be unpacked:</p>
<pre>default_userdir="C://paintit"
default_cachedir="C://paintit"
default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-ea"
jdkhome="jre"</pre>
<p class="tips"> Read about <a href="http://wiki.netbeans.org/FaqWhatIsUserdir">userdir & cachedir</a> in the NetBeans Wiki.</p>
</li>
<li><p>Register the conf file in the application's &quot;project.properties&quot; file, i.e.,
in the same file where <tt>app.name</tt> is defined, like this:</p>
<pre>app.conf=nbproject/paintit.conf</pre>
<p>The <tt>paintit.conf</tt> file
needs to be defined relative to the application root folder. In this case,
we have put the file within the "nbproject" folder, which has as its
parent the application root folder. Now you have specified
that the application will use the configuration file that you have provided,
within which the bundled JRE is defined as the JRE to be used for
starting up the application.
</p>
</li>
<li><p>Regenerate the installer,
as explained in the previous section, and the
installer will be created, as always. However, when you run
the installer, the JRE
will be unbundled into a temp folder and the installer
will use that JRE to run itself. A copy of the JRE will be made
to a folder named &quot;jre&quot; within the root
folder of your application, where the &quot;jdkhome&quot;
setting in the .conf file of the application points.
For the Paint Application, you
should now see the following:
</p>
<br/>
<p><img src="../images/tutorials/nbi/721/bundle-jre-3.png" alt="1"/></p>
<p>Run the application via the executable in the "bin" folder
and the JRE within the application root folder
will be used to start it.</p>
</li>
</ol>
</div>
</div>
</div>
<p>Now that you have learned how to create, customize, and bundle additional resources with the NetBeans installer,
read the resources below for many additional details and other
information that may be relevant to your business needs:</p>
<ul>
<li><a href="http://wiki.netbeans.org/NBI">http://wiki.netbeans.org/NBI</a></li>
<li><a href="http://installer.netbeans.org/docs/nbi-devguide.html">http://installer.netbeans.org/docs/nbi-devguide.html</a></li>
</ul>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20NetBeans%20Platform%20Installer%207.2.1%20Tutorial">Send Us Your Feedback</a></div>
</body>
</html>