<!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>NetBeans Platform Ant Command Line 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 on the Ant
              command line with the NetBeans Platform."/>
        <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
    </head>
    <body>

        <h1>NetBeans Platform Ant Command Line Tutorial</h1>

        <p>This document shows you how to use Ant and the command line to
            set up and deploy NetBeans Platform applications.
        </p>

        <p>
            You will start by setting up a folder and file structure for
            deploying a NetBeans Platform application. The structure will
            consist of folders, together with Ant scripts and property files.
            For example, one of the Ant targets will download the NetBeans Platform, while
            another will run it. Next, you will create a new folder and file structure
            for adding a new module to the application. Finally, you will add
            code that will enable your module to provide new components, such as
            a new menu item, to the application.
        </p>

        <p>Once you have gone through this simple scenario, you should not <i>need</i> to
            use NetBeans IDE at all when creating NetBeans Platform applications.
            On the other hand, you might still <i>want</i> to use NetBeans IDE, since
            it provides many wizards, templates, and other tools for generating
            code and visualizing module structures, which are features
            that no other IDE currently provides. Simultaneously, the instructions
            below provide all the NetBeans-specific information needed for someone to create a plugin
            for a different IDE enabling developers to use other IDEs to provide
            the folder structures and file contents outlined below.
        </p>

        <p><b>Contents</b></p>
        <ul class="toc">
            <li><a href="#rcp">Downloading the NetBeans Platform</a></li>
            <li><a href="#application">Setting Up a NetBeans Platform Application</a></li>
            <li><a href="#module">Setting Up a NetBeans Module</a></li>
            <li><a href="#menu">Adding a Menu Item</a></li>
            <li><a href="#window">Adding a Window</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="http://ant.apache.org/">Ant</a></td>
                    <td class="tbltd1"></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>The tutorial assumes you have set up Ant and that you know how to use it.</p>


        <!-- ===================================================================================== -->
        <p></p>
        <h2><a name="rcp"></a>Downloading the NetBeans Platform</h2>
        <p>In this section, you begin to set up a folder structure
            for your NetBeans Platform work, focusing on an Ant script
            to download the NetBeans Platform.</p>

        <div class="indent">

            <ol>

                <li><p>Create a new folder with a name of your choosing (here referred to as <code>ABC</code>) and, within it, create a folder
                        named <code>myapp</code> (or any other name), containing a file named <code>build.xml</code>. At this
                        point the structure of your application should be as follows:</p>
                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-structure-0.png" alt="structure 1"/></p>
                </li>

                <li>Read <a href="http://wiki.netbeans.org/AutoUpdateTask">http://wiki.netbeans.org/AutoUpdateTask</a>.</li>

                <li><p>Define the content of the <code>build.xml</code> file as follows:</p>

                    <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;project name="myapp" basedir="."&gt;

    &lt;description&gt;Builds, tests, and runs the project "myapp".&lt;/description&gt;

    &lt;!-- change this: --&gt;
    &lt;property name="netbeans"
          value="/home/geertjan/NetBeansProjects/ABC/nbrcp"/&gt;

    &lt;property name="bootstrap.url"
          value="http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/netbeans/harness/tasks.jar"/&gt;

    &lt;property name="netbeans.updatecenter.url"
          value="http://updates.netbeans.org/netbeans/updates/7.0/uc/final/distribution/catalog.xml.gz"/&gt;

    &lt;target name="download-netbeans-rcp"&gt;
        &lt;mkdir dir="${netbeans}/harness"/&gt;
        &lt;get src="${bootstrap.url}" dest="${netbeans}/harness/tasks.jar" usetimestamp="true" verbose="true"/&gt;
        &lt;taskdef name="autoupdate" classname="org.netbeans.nbbuild.AutoUpdate" classpath="${netbeans}/harness/tasks.jar"/&gt;
        &lt;autoupdate installdir="${netbeans}" updatecenter="${netbeans.updatecenter.url}"&gt;
            &lt;modules includes=".*" clusters="harness[0-9]*"/&gt;
            &lt;modules includes=".*" clusters="platform[0-9]*"/&gt;
        &lt;/autoupdate&gt;
    &lt;/target&gt;

&lt;/project&gt;
                    </pre>

                </li>

                <li><p>On the command line, go to the "ABC/myapp" folder and run this:</p>

                    <pre class="examplecode">ant download-netbeans-rcp</pre>

                    <p>You now see the NetBeans Platform downloading:</p>

                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-download.png" alt="structure 1"/></p>

                    <p>In your ABC folder, you now have a folder named "nbrcp", as shown below:</p>

                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-structure-1.png" alt="structure 1"/></p>

                    <p>Read <code>harness/README</code> for a lot of tips, configuration data, and advice.</p>

                    <p>The folder "myapp" is where you will create your application,
                        on top of the NetBeans Platform, which is in the folder "nbrcp".</p>
                </li>
            </ol>

        </div>

        <p><b>Note:</b> Instead of using the Ant target above, you can simply download the ZIP
            files for <code>harness</code> and <code>platform</code>:</p>

        <ul>
            <li><p>platform: <a href="https://netbeans.org/downloads/start.html?filename=zip/moduleclusters/netbeans-7.0-201104080000-ml-platform.zip&amp;pagelang=" rel="nofollow">http://netbeans.org/downloads/start.html?filename=zip/moduleclusters/netbeans-7.0-201104080000-ml-platform.zip&amp;pagelang=</a></p></li>
            <li><p>harness: <a href="https://netbeans.org/downloads/start.html?filename=zip/moduleclusters/netbeans-7.0-201104080000-ml-harness.zip&amp;pagelang=" rel="nofollow">http://netbeans.org/downloads/start.html?filename=zip/moduleclusters/netbeans-7.0-201104080000-ml-harness.zip&amp;pagelang=</a></p></li>
        </ul>

        <p>Now that you have the NetBeans Platform, you can start creating
            an application on top of it.</p>

        <!-- ===================================================================================== -->
        <p></p>
        <h2><a name="application"></a>Setting Up a NetBeans Platform Application</h2>
        <p>In this section, you set up a minimal folder and file structure for a new
            NetBeans Platform application.</p>

        <p>At the end of this section, you will have a source structure
            on disk, as follows:</p>
        <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-structure.png" alt="structure 1"/></p>

        <div class="indent">

            <ol>

                <li><p>Within the "myapp" folder, create a folder named "nbproject".
                        This folder will, from now onwards, be referred to as
                        the "application project folder", while "myapp" will be referred to
                        as the "application root folder".</p></li>

                <li><p>Within the application project folder, create a file named
                        <code>build-impl.xml</code>, with the following content.</p>

                    <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;project name="myapp-impl" basedir=".." xmlns:sproject="https://netbeans.org/ns/nb-module-suite-project/1"&gt;

    &lt;property file="nbproject/platform.properties"/&gt;

    &lt;macrodef name="property" uri="https://netbeans.org/ns/nb-module-suite-project/1"&gt;
        &lt;attribute name="name"/&gt;
        &lt;attribute name="value"/&gt;
        &lt;sequential&gt;
            &lt;property name="@{name}" value="${@{value}}"/&gt;
        &lt;/sequential&gt;
    &lt;/macrodef&gt;

    &lt;macrodef name="evalprops" uri="https://netbeans.org/ns/nb-module-suite-project/1"&gt;
        &lt;attribute name="property"/&gt;
        &lt;attribute name="value"/&gt;
        &lt;sequential&gt;
            &lt;property name="@{property}" value="@{value}"/&gt;
        &lt;/sequential&gt;
    &lt;/macrodef&gt;

    &lt;sproject:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir"/&gt;

    &lt;sproject:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir"/&gt;

    &lt;sproject:evalprops property="cluster.path.evaluated" value="${cluster.path}"/&gt;

    &lt;import file="${harness.dir}/suite.xml"/&gt;

&lt;/project&gt;</pre>

                </li>

                <li>Import the <code>build-impl.xml</code> file into the <code>build.xml</code> file,
                    as follows:

                    <pre class="examplecode">&lt;import file="nbproject/build-impl.xml"/&gt;</pre>

                    <p>The <code>build-impl.xml</code> file gives you access to the NetBeans Platform
                        infrastructure, such as its "run" target. You will never need to change
                        the <code>build-impl.xml</code> file. On the other hand, the <code>build.xml</code> file
                        is the Ant script where you will customize, where necessary, your application's
                        build process.</p></li>

                <li><p>Within the application project folder, create a file named
                        <code>platform.properties</code>, with the following content.</p>

                    <pre class="examplecode">run.args.extra=--laf Nimbus
nbplatform.active=default
nbplatform.active.dir=/home/geertjan/NetBeansProjects/ABC/nbrcp
harness.dir=${nbplatform.active.dir}/harness
cluster.path=${nbplatform.active.dir}/platform
disabled.modules=</pre>

                    <p>As you can see, the <code>platform.properties</code> file
                        configures your NetBeans Platform application, pointing to
                        its <code>harness</code> and the <code>platform</code> folders,
                        as well as a placeholder for the modules you will disable, later
                        in your development work. Make sure to
                        change <code>nbplatform.active.dir</code> above to point to
                        your "nbrcp" folder.</p>

                </li>
                <li><p>Within the application project folder, create a file named
                        <code>project.properties</code>, with the following content.</p>

                    <pre class="examplecode">app.name=myapp
branding.token=${app.name}
modules=</pre>

                    <p>As you can see, the <code>project.properties</code> file
                        is focused on the application. In this case, you have added
                        keys in the file for the name
                        of the application and the custom modules that the
                        application will provide.</p>

                </li>

                <li><p>On the command line, go to the "ABC/myapp" folder and run this:</p>

                    <pre class="examplecode">ant run</pre>

                </li>

            </ol>

        </div>

        <p>The NetBeans Platform starts up and you see a main window, with
            a menu bar and a tool bar, as shown below:</p>

        <p><img src="../images/tutorials/ant/70/ant-first-run.png" alt="structure 1"/></p>

        <p>Try out some of the toolbar buttons
            and menu items, to see what the NetBeans Platform provided by default.</p>

        <!-- ===================================================================================== -->
        <p></p>
        <h2><a name="module"></a>Setting Up a NetBeans Module</h2>
        <p>In this section, you set up a minimal folder and file structure for a new
            NetBeans module in your NetBeans Platform application. In the process,
            you also register the module with the application so that, when the application
            starts up, it will load the module together with the default NetBeans
            Platform modules making
            up the application.</p>

        <div class="indent">

            <ol>

                <li><p>Start by creating some folders:</p>

                    <ul><li><p>Within the "myapp" folder, create a folder named "mymodule".
                                This folder will, from now onwards, be referred to as
                                the "module root folder". </p></li>

                        <li><p>Within the module root folder,
                                create a new folder named "nbproject", which will,
                                from now onwards, be referred to
                                as the "module project folder".</p></li>

                        <li><p>Within the module root folder,
                                create a new folder structure "src/org/demo/mymodule", which will
                                be the main package.</p></li></ul>

                    <p>Check that the structure you have created
                        is now as follows:</p>
                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-structure-2.png" alt="structure 1"/></p>

                </li>

                <li><p>In the module project folder, create the following:</p>


                    <ul><li><p>A file named <code>suite.properties</code>, with this content:</p>

                            <pre class="examplecode">suite.dir=${basedir}/..</pre>

                            <p>The above points to the "myapp" folder, specifying that
                                it is the application that owns this module.</p>

                        </li>

                        <li><p>A file named <code>project.properties</code>, with this content:</p>

                            <pre class="examplecode">javac.source=1.6
javac.compilerargs=-Xlint -Xlint:-serial</pre>

                        </li>

                        <li><p>A file named <code>project.xml</code>, with this content:</p>

                            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="https://netbeans.org/ns/project/1"&gt;
    &lt;type&gt;org.netbeans.modules.apisupport.project&lt;/type&gt;
    &lt;configuration&gt;
        &lt;data xmlns="https://netbeans.org/ns/nb-module-project/3"&gt;
            &lt;code-name-base&gt;org.demo.mymodule&lt;/code-name-base&gt;
            &lt;suite-component/&gt;
            &lt;module-dependencies&gt;
            &lt;/module-dependencies&gt;
            &lt;public-packages/&gt;
        &lt;/data&gt;
    &lt;/configuration&gt;
&lt;/project&gt;</pre>

                        </li>

                        <li><p>A file named
                                <code>build-impl.xml</code>, with this content:</p>

                            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;project name="org.demo.mymodule-impl" basedir=".."&gt;

    &lt;property file="nbproject/suite.properties"/&gt;

    &lt;property file="${suite.dir}/nbproject/platform.properties"/&gt;

    &lt;macrodef name="property" uri="https://netbeans.org/ns/nb-module-project/2"&gt;
        &lt;attribute name="name"/&gt;
        &lt;attribute name="value"/&gt;
        &lt;sequential&gt;
            &lt;property name="@{name}" value="${@{value}}"/&gt;
        &lt;/sequential&gt;
    &lt;/macrodef&gt;

    &lt;macrodef name="evalprops" uri="https://netbeans.org/ns/nb-module-project/2"&gt;
        &lt;attribute name="property"/&gt;
        &lt;attribute name="value"/&gt;
        &lt;sequential&gt;
            &lt;property name="@{property}" value="@{value}"/&gt;
        &lt;/sequential&gt;
    &lt;/macrodef&gt;

    &lt;nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="https://netbeans.org/ns/nb-module-project/2"/&gt;
    &lt;nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="https://netbeans.org/ns/nb-module-project/2"/&gt;
    &lt;nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="https://netbeans.org/ns/nb-module-project/2"/&gt;

    &lt;import file="${harness.dir}/build.xml"/&gt;

&lt;/project&gt;</pre>

                        </li>
                    </ul></li>
                <li><p>In the module root folder, that is, within the "mymodule" folder,
                        create the following:</p>

                    <ul><li><p>A file named <code>build.xml</code>, with the
                                following content:</p>

                            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="org.demo.mymodule" default="netbeans" basedir="."&gt;
    &lt;description&gt;Builds, tests, and runs the project org.demo.mymodule.&lt;/description&gt;
    &lt;import file="nbproject/build-impl.xml"/&gt;
&lt;/project&gt;</pre>

                        </li>

                        <li><p>A file named <code>manifest.mf</code>, with the
                                following content:</p>

                            <pre class="examplecode">Manifest-Version: 1.0
OpenIDE-Module: org.demo.mymodule
OpenIDE-Module-Specification-Version: 1.0</pre>

                        </li></ul></li>

                <li><p>Check that the "mymodule" structure you have created
                        is now as follows:</p>
                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-structure-3.png" alt="structure 1"/></p></li>

                <li><p>In the application project folder, that is, "myapp/nbproject",
                        change the "modules" key in "project.properties" to the following, to register the
                        module with the application:</p>
                    <pre class="examplecode">modules=${project.org.demo.mymodule}

project.org.demo.mymodule=mymodule</pre></li>


                <li><p>On the command line, go to the "ABC/myapp" folder and run this:</p>

                    <pre class="examplecode">ant run</pre>

                </li>

                <li><p>The application starts up and, since you didn't add any code
                        to the module, you see no changes in the application.
                        Nevertheless, looking at the output, you can see that the module loaded successfully:</p>

                    <p><img style="border: 1px solid" src="../images/tutorials/ant/ant-result-1.png" alt="structure 1"/></p></li>

            </ol>

        </div>

        <p>In the next section, you add a new feature to the application.</p>

        <!-- ===================================================================================== -->
        <p></p>
        <h2><a name="menu"></a>Adding a Menu Item</h2>
        <p>In this section, you add a menu item to the module you created in the
            previous section. All the files
            described below are assumed to be created in the main package, which is
            <code>org.demo.mymodule</code>.</p>

        <div class="indent">

            <ol>

                <li><p>Add a new Action class, in a file named "HelloWorldAction.java",
                        to the module:</p>

                    <pre class="examplecode">package org.demo.mymodule;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import org.openide.awt.ActionRegistration;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionID;
import org.openide.util.NbBundle.Messages;

@ActionID(category = "Window",
id = "org.demo.mymodule.HelloWorldAction")
@ActionRegistration(displayName = "#CTL_HelloWorldAction")
@ActionReferences({
    @ActionReference(path = "Menu/Window", position = -100)
})
@Messages("CTL_HelloWorldAction=Hello World")
public final class HelloWorldAction implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "hello...");
    }
    
}</pre>

                </li>

                <li><p>In the module project folder, add
                        the list of
                        module dependencies to the "project.xml"
                        file, as shown below:</p>

                    <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="https://netbeans.org/ns/project/1"&gt;
    &lt;type&gt;org.netbeans.modules.apisupport.project&lt;/type&gt;
    &lt;configuration&gt;
        &lt;data xmlns="https://netbeans.org/ns/nb-module-project/3"&gt;
            &lt;code-name-base&gt;org.demo.mymodule&lt;/code-name-base&gt;
            &lt;suite-component/&gt;
            <b>&lt;module-dependencies&gt;
                &lt;dependency&gt;
                    &lt;code-name-base&gt;org.netbeans.modules.settings&lt;/code-name-base&gt;
                    &lt;build-prerequisite/&gt;
                    &lt;compile-dependency/&gt;
                    &lt;run-dependency&gt;
                        &lt;release-version&gt;1&lt;/release-version&gt;
                        &lt;specification-version&gt;1.29&lt;/specification-version&gt;
                    &lt;/run-dependency&gt;
                &lt;/dependency&gt;
                &lt;dependency&gt;
                    &lt;code-name-base&gt;org.openide.awt&lt;/code-name-base&gt;
                    &lt;build-prerequisite/&gt;
                    &lt;compile-dependency/&gt;
                    &lt;run-dependency&gt;
                        &lt;specification-version&gt;6.7.1&lt;/specification-version&gt;
                    &lt;/run-dependency&gt;
                &lt;/dependency&gt;
                &lt;dependency&gt;
                    &lt;code-name-base&gt;org.openide.util&lt;/code-name-base&gt;
                    &lt;build-prerequisite/&gt;
                    &lt;compile-dependency/&gt;
                    &lt;run-dependency&gt;
                        &lt;specification-version&gt;8.1&lt;/specification-version&gt;
                    &lt;/run-dependency&gt;
                &lt;/dependency&gt;
            &lt;/module-dependencies&gt;</b>
            &lt;public-packages/&gt;
        &lt;/data&gt;
    &lt;/configuration&gt;
&lt;/project&gt;</pre>

                </li>

                <li><p>On the command line, go to the "ABC/myapp" folder and run this:</p>

                    <pre class="examplecode">ant run</pre>

                </li>

                <li><p>The application starts up and shows a new menu item under the Window menu:</p>
                    <p><img src="../images/tutorials/ant/70/ant-second-run.png" alt="structure 1"/></p>

                </li>

            </ol>

        </div>

        <!-- ===================================================================================== -->
        <p></p>
        <h2><a name="window"></a>Adding a Window</h2>
        <p>In this section, you use the NetBeans TopComponent class
            to add a window to the module you created previously. All the files
            described below are assumed to be created in the main package, which is
            <code>org.demo.mymodule</code>.</p>

        <div class="indent">

            <ol>

                <li><p>Add a new TopComponent class to the module, including
                        some code for initializing and
                        persisting the TopComponent:</p>

                    <pre class="examplecode">package org.demo.mymodule;

import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;
import static org.demo.mymodule.Bundle.*;

@TopComponent.Description(preferredID = "HelloTopComponent",
persistenceType = TopComponent.PERSISTENCE_ALWAYS)
@TopComponent.Registration(mode = "editor", openAtStartup = true)
@ActionID(category = "Window", id = "org.demo.mymodule.HelloTopComponent")
@ActionReference(path = "Menu/Window" /*, position = 333 */)
@TopComponent.OpenActionRegistration(displayName = "#CTL_HelloAction",
preferredID = "HelloTopComponent")
@Messages(
        {"CTL_HelloAction=Open Hello Window",
        "NAME_Hello=Hello Window"
        })
public class HelloWorldTopComponent extends TopComponent {

    public HelloWorldTopComponent() {
        setDisplayName(NAME_Hello());
    }
                
    @Override
    public void componentOpened() {
    }

    @Override
    public void componentClosed() {
    }

}</pre>

                </li>

                <li><p>In the module project folder,
                        add the following
                        module dependencies in the <code>project.xml</code>
                        file:</p>

                    <pre class="examplecode">&lt;module-dependencies&gt;
    &lt;dependency&gt;
        &lt;code-name-base&gt;org.netbeans.modules.settings&lt;/code-name-base&gt;
        &lt;build-prerequisite/&gt;
        &lt;compile-dependency/&gt;
        &lt;run-dependency&gt;
            &lt;release-version&gt;1&lt;/release-version&gt;
            &lt;specification-version&gt;1.29&lt;/specification-version&gt;
        &lt;/run-dependency&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;code-name-base&gt;org.openide.awt&lt;/code-name-base&gt;
        &lt;build-prerequisite/&gt;
        &lt;compile-dependency/&gt;
        &lt;run-dependency&gt;
            &lt;specification-version&gt;6.7.1&lt;/specification-version&gt;
        &lt;/run-dependency&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;code-name-base&gt;org.openide.util&lt;/code-name-base&gt;
        &lt;build-prerequisite/&gt;
        &lt;compile-dependency/&gt;
        &lt;run-dependency&gt;
            &lt;specification-version&gt;8.1&lt;/specification-version&gt;
        &lt;/run-dependency&gt;
    &lt;/dependency&gt;
    <b>&lt;dependency&gt;
        &lt;code-name-base&gt;org.openide.util.lookup&lt;/code-name-base&gt;
        &lt;build-prerequisite/&gt;
        &lt;compile-dependency/&gt;
        &lt;run-dependency&gt;
            &lt;specification-version&gt;8.6.1&lt;/specification-version&gt;
        &lt;/run-dependency&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;code-name-base&gt;org.openide.windows&lt;/code-name-base&gt;
        &lt;build-prerequisite/&gt;
        &lt;compile-dependency/&gt;
        &lt;run-dependency&gt;
            &lt;specification-version&gt;6.39.1&lt;/specification-version&gt;
        &lt;/run-dependency&gt;
    &lt;/dependency&gt;</b>
&lt;/module-dependencies&gt;</pre>

                </li>

                <li><p>On the command line, go to the "ABC/myapp" folder and run this:</p>

                    <pre class="examplecode">ant run</pre>

                </li>

                <li><p>The application starts up and shows a new window, which can also be
                        opened from the Window menu.</p>
                    <p><img src="../images/tutorials/ant/70/ant-third-run.png" alt="structure 1"/></p>

                </li>

            </ol>

        </div>

        <p>Congratulations, you've successfully set up a pure Ant-based application structure
            for working with the NetBeans Platform.</p>

        <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Ant%20Command%20Line%20Tutorial">Send Us Your Feedback</a></div>

    </body>

</html>
