<!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>Creating NetBeans Platform Applications from Maven Archetypes</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="This tutorial demonstrates how to create a simple NetBeans Platform application and module from a command line prompt using the Maven build framework."/>
   <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
</head>
<body>

   <h1>Creating NetBeans Platform Applications from Maven Archetypes</h1>

   <p>Welcome to the <a href="https://platform.netbeans.org/"><b>NetBeans Platform</b></a>!</p>

    <p>This document demonstrates how to create a
    NetBeans Platform application and module from a command line prompt using the Maven build framework.
    To create this application you do not need to install or use the NetBeans IDE.
    You will need to create and edit some files, but you can use a simple text editor.
    However, an IDE can be very helpful when performing tasks such as editing the POM and managing dependencies.</p>

    <p>In this tutorial you will see that after you install Maven, you can specify goals and parameters
    and execute Maven goals from the command line prompt to create and build projects.
    The IDE performs the same task, but provides an interface that simplifies the task of specifying
    the parameters for creating projects.</p>



 <p class="tips">If you are new to the NetBeans Platform, you might want to watch the
 screencast series <a href="https://platform.netbeans.org/tutorials/nbm-10-top-apis.html">Top 10 NetBeans APIs</a>.</p>

   <p><b>Contents</b></p>
      <ul class="toc">
        <li><a href="#01">Creating the NetBeans Platform Application</a></li>
        <li><a href="#02">Installing and Running the NetBeans Platform Application</a></li>
        <li><a href="#03">Creating a Module from an Archetype</a></li>
        <li><a href="#04">Adding the New Module as a Dependency</a></li>
        <li><a href="#05">Building the Application With the New Module</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://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                <td class="tbltd1">Version 6</td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td>
                <td class="tbltd1">Version 2.0.9 or higher</td>
            </tr>
        </tbody>
    </table>

    <p><strong class="notes">Notes:</strong></p>
    <div class="indent">
    <ul>
        <li>You do not need to download a separate version
        of the NetBeans Platform to develop applications for the NetBeans Platform.
        In this tutorial you do not need to install NetBeans IDE.
        You can use a simple text editor to create classes and modify files.</li>
    </ul>
    </div>
    <p class="tips">You can download <a href="https://netbeans.org/projects/samples/downloads/download/Samples/Platform/mavenPlatformApp.zip">a zip archive of the finished project</a>.</p>

    <p>Before starting this tutorial you may want to familiarize yourself with
    the following documentation.</p>
    <ul><li><a href="http://maven.apache.org/guides/mini/guide-configuring-maven.html">Maven - Guide to Configuring Maven</a></li>
        <li><a href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html">Maven in 5 Minutes</a></li>
        <li><a href="http://www.sonatype.com/books/maven-book/reference/introduction.html">Chapter 1. Introducing Apache Maven</a>
         (from <a href="http://www.sonatype.com/books/maven-book/reference/public-book.html">Maven: The Definitive Guide</a>)</li>
    </ul>


<!-- =================================================================== -->
<!-- +++++++++++++++ Creating the Application ++++++++++++++++++++++++++ -->


    <h2><a name="01"></a>Creating the NetBeans Platform Application</h2>
    <p>In this exercise you will execute the Maven goal <tt>generate</tt> from the command line to generate
    a new NetBeans Platform application from an archetype in the codehaus.org repository.
    In the command you will specify the parameters that will be used when Maven generates the application.</p>
    <ol>
        <li>Open a command line terminal.</li>
        <li>Test your Maven installation by typing the following command.
        <pre class="examplecode">mvn -version</pre>

        <p>After you type the command you will see details about the Maven installation, including the version of Maven and the JDK.</p>
        <pre class="examplecode">
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_20
</pre>
        <p>You need to have Maven version 2.0.9 or newer and JDK 1.6.</p></li>
        <li>Navigate to the directory where you want to create the NetBeans Platform application.</li>
        <li>Type the following command in the terminal to create a project named <strong>mavenPlatformApp</strong>.
        <pre class="examplecode">mvn -DarchetypeVersion=1.5 -Darchetype.interactive=false -DgroupId=com.mycompany -DarchetypeArtifactId=<strong>netbeans-platform-app-archetype</strong> -DarchetypeRepository=http://repository.codehaus.org/ -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.codehaus.mojo.archetypes -Dpackage=com.mycompany.mavenplatformapp -DartifactId=mavenPlatformApp --batch-mode org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate</pre>
        </li>
    </ol>
    <p>You can see that the command specifies the archetype that Maven will use to create
    the NetBeans Platform application (<a href="http://mvnrepository.com/artifact/org.codehaus.mojo.archetypes/netbeans-platform-app-archetype"><tt>netbeans-platform-app-archetype</tt></a>).
    The command also specifies the location of the repository for the archetype (<tt>http://repository.codehaus.org/</tt>)
    and the version (<tt>1.5</tt>) and GroupId (<tt>org.codehaus.mojo.archetypes</tt>) of the archetype.</p>

    <p>When you run the command, Maven will automatically retrieve the archetype and create the project according to
    the details specified in the command (artifact id, version, package).</p>

    <p class="notes"><strong>Note.</strong> When you use NetBeans IDE to create a NetBeans platform application,
    the IDE essentially generates and executes the Maven goal with similar parameters.</p>

    <p class="tips">For more information about the plugin that is used to generate the artifacts,
    see the documentation on the <a href="http://mojo.codehaus.org/nbm-maven-plugin/">nbm-maven-plugin</a> at
    <a href="http://mojo.codehaus.org/">mojo.codehaus.org</a>.</p>

    <p>When you run the command, you will see output similar to the following in the terminal window.</p>
    <pre class="examplecode">
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 seconds
[INFO] Finished at: Thu Sep 02 17:47:03 CEST 2010
[INFO] Final Memory: 13M/81M
[INFO] ------------------------------------------------------------------------
</pre>
    <p>If you look in the root directory <tt>mavenPlatformApp</tt> that was created,
        you can see that the new project contains a <tt>pom.xml</tt> file and a directory for each of the default sub-modules of the archetype: application and branding. <br/>
    <img src="../images/tutorials/maven-commandline/maven-platform-archetype-default.png" alt="Screenshot of structure of mavenPlatformApp" title="Screenshot of structure of mavenPlatformApp" class="margin-around b-all" />
    </p>

    <p>If you open <tt>pom.xml</tt> for mavenPlatformApp in an editor, you will see that the POM specifies all the details required for building the application and modules.</p>
    <pre class="examplecode">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

    &lt;groupId&gt;com.mycompany&lt;/groupId&gt;
    &lt;artifactId&gt;mavenPlatformApp&lt;/artifactId&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;packaging&gt;pom&lt;/packaging&gt;

    &lt;name&gt;mavenPlatformApp - NetBeans Platform Application&lt;/name&gt;

    &lt;repositories&gt;
        &lt;!-- this is a remote repository hosting the netbeans api artifacts.
         the versions of the artifacts are netbeans IDE release based, eg. RELEASE65
         You might want to use your own repository. To create one, use the nbm:populate-repository goal.
          --&gt;
        &lt;repository&gt;
            &lt;id&gt;netbeans&lt;/id&gt;
            &lt;name&gt;repository hosting netbeans.org api artifacts&lt;/name&gt;
            &lt;url&gt;http://bits.netbeans.org/maven2&lt;/url&gt;
        &lt;/repository&gt;
    &lt;/repositories&gt;

    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;junit&lt;/groupId&gt;
            &lt;artifactId&gt;junit&lt;/artifactId&gt;
            &lt;version&gt;4.8.1&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;

    &lt;build&gt;
        &lt;pluginManagement&gt;
            &lt;plugins&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                    &lt;artifactId&gt;nbm-maven-plugin&lt;/artifactId&gt;
                    &lt;version&gt;3.2&lt;/version&gt;
                    &lt;extensions&gt;true&lt;/extensions&gt;
                    &lt;configuration&gt;
                        &lt;brandingToken&gt;${brandingToken}&lt;/brandingToken&gt;
                        &lt;cluster&gt;foobar&lt;/cluster&gt;
                    &lt;/configuration&gt;
                &lt;/plugin&gt;

                &lt;plugin&gt;
                    &lt;!-- netbeans modules in 6.9+ are 1.6 compatible --&gt;
                    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
                    &lt;version&gt;2.3&lt;/version&gt;
                    &lt;configuration&gt;
                        &lt;source&gt;1.6&lt;/source&gt;
                        &lt;target&gt;1.6&lt;/target&gt;
                    &lt;/configuration&gt;
                &lt;/plugin&gt;
            &lt;/plugins&gt;
        &lt;/pluginManagement&gt;
    &lt;/build&gt;

    &lt;modules&gt;
        &lt;module&gt;branding&lt;/module&gt;
        &lt;module&gt;application&lt;/module&gt;
    &lt;/modules&gt;

    &lt;properties&gt;
        &lt;netbeans.version&gt;RELEASE691&lt;/netbeans.version&gt;
        &lt;brandingToken&gt;foo&lt;/brandingToken&gt;
    &lt;/properties&gt;
&lt;/project&gt;</pre>

        <p>If you look at the <tt>&lt;properties&gt;</tt> element, you can see that the version of the NetBeans platform is
        specified as <tt>RELEASE691</tt>. In the POM of your sub-modules, you can specify <tt>${netbeans.version}</tt> as the version
        and the module will use the version specified in the parent POM project.
        The enables you to easily update the NetBeans platform version for all the project's sub-modules.
        Later in this tutorial you will modify the default version generated in the POM by the archetype
        to specify <tt>${netbeans.version}</tt>.
        </p>

<!-- =================================================================== -->
<!-- ++++++++++++++++ Running the Application ++++++++++++++++++++++++++ -->


        <h2><a name="02"></a>Installing and Running the NetBeans Platform Application</h2>
        <p>In this exercise you will run the Maven <tt>install</tt> goal from the command line to build the application and copy
        the artifacts in your local repository.
        The NetBeans Platform application is a multi-module application.
        You will use the <tt>reactor</tt> mechanism in Maven to build the application project and the project's dependencies.
        After you build the application you will execute the <tt>run-platform</tt> goal to launch the application.</p>

        <ol>
            <li>Navigate to the <tt>mavenPlatformApp</tt> directory and type the following command to build the project.
            <pre class="examplecode">mvn --projects com.mycompany:application --also-make install</pre>
            </li>
            <li>After you build the application, navigate to the <tt>application</tt> directory and type the following command to launch the application.
            <pre class="examplecode">mvn nbm:run-platform</pre>
            </li>
        </ol>
        <p>When you run the <tt>nbm-maven-plugin</tt> with the <tt>run-platform</tt> goal, Maven will
        launch the branded NetBeans platform application.<br/>
        <img src="../images/tutorials/maven-commandline/maven-command-platform-default.png" alt="Screenshot of default application" title="Screenshot of default application" class="margin-around b-all" />
        </p>

        <p class="tips">For more information of how to create and build multi-module projects,
        see the <a href="http://maven.apache.org/guides/mini/guide-multiple-modules.html">Maven - Guide to Working with Multiple Modules</a>
        at <a href="http://maven.apache.org/">maven.apache.org</a>.</p>

        <p class="tips">For more information about the <tt>nbm-maven-plugin</tt>, see the documentation on the
        <tt><a href="http://mojo.codehaus.org/nbm-maven-plugin/">nbm-maven-plugin</a></tt> and the
        <tt><a href="http://mojo.codehaus.org/nbm-maven-plugin/run-platform-mojo.html">run-platform</a></tt> goal
        at <a href="http://mojo.codehaus.org">mojo.codehaus.org</a>. </p>

        <p>You have now successfully created and launched your NetBeans Platform application.
        The default branding elements are located in the <tt>branding</tt> sub-module that was generated according to the archetype.
        The NetBeans IDE provides tools and wizards that can help you to modify the branding elements.</p>
        
        <p>In the next section you will create a new module for the application.</p>

<!-- =================================================================== -->
<!-- ++++++++++++++++++ Creating a new Module ++++++++++++++++++++++++++ -->

        <h2><a name="03"></a>Creating a Module from an Archetype</h2>

        <p>You will now create a new module that is named mavenPlatformModuleA in the <tt>mavenPlatformApp</tt> directory.
        In the same way that you created the NetBeans Platform application,
        you will run a Maven command from the command line and use the module archetype <tt>nbm-archetype</tt>.</p>

        <p>After you create the module, you will use a text editor to create a simple class in the module
        and then modify the module's <tt>layer.xml</tt> and <tt>bundle.properties</tt> files.
        You will then build the module to install the module in the local repository.</p>
        <ol>
            <li>Navigate to the <tt>mavenPlatformApp</tt> directory in the command line terminal and type and run the following command:

            <pre class="examplecode">mvn -DarchetypeVersion=1.4 -Darchetype.interactive=false -DgroupId=com.mycompany -DarchetypeArtifactId=<strong>nbm-archetype</strong> -DarchetypeRepository=http://repository.codehaus.org/ -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.codehaus.mojo.archetypes -Dpackage=com.mycompany.mavenplatformmodulea -DartifactId=mavenPlatformModuleA --batch-mode org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate</pre>

                <p>You can see that the command specifies <tt>nbm-archetype</tt>.
                The archetype will be retrieved from the codehaus remote repository.</p>
                <p>When you run the command, you will see output similar to the following in the terminal window.</p>
                <pre class="examplecode">
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO]   mavenPlatformApp - NetBeans Platform Application
[INFO]   mavenPlatformApp - Platform application branding resources
[INFO]   mavenPlatformApp - NetBeans Platform based application
[INFO] ------------------------------------------------------------------------
[INFO] Building mavenPlatformApp - NetBeans Platform Application
[INFO]    task-segment: [org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] Archetype defined by properties
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Fri Sep 03 15:01:42 CEST 2010
[INFO] Final Memory: 21M/81M
[INFO] ------------------------------------------------------------------------
            </pre>
            <p>If you look at the contents of the <tt>mavenPlatformApp</tt> directory, you will see that the directory
            contains a new directory that is named <tt>mavenPlatformModuleA</tt>.
            The new directory contains a <tt>src</tt> directory and <tt>pom.xml</tt>.
            The files <tt>layer.xml</tt> and <tt>bundle.properties</tt> were generated in the
            <tt>resources/com/mycompany/mavenplatformmodulea</tt> directory.</p>
            <img src="../images/tutorials/maven-commandline/maven-command-modulea.png" alt="Screenshot of structure of mavenplatformmodulea" title="Screenshot of structure of mavenplatformmodulea" class="margin-around b-all" />
            <p>In the next step you will create a class in the
            <tt>java/com/mycompany/mavenplatformmodulea</tt> directory.</p>
            </li>
            <li>Use a text editor to create the following class <tt>HelloWorldAction.java</tt>
            in the <tt>java/com/mycompany/mavenplatformmodulea</tt> directory.
            <pre class="examplecode">
package com.mycompany.mavenplatformmodulea;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;

public class HelloWorldAction implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        NotifyDescriptor d = new NotifyDescriptor.Message("hello...");
        DialogDisplayer.getDefault().notify(d);
    }

}</pre>
            </li>
            <li>Use a text editor to edit the <tt>layer.xml</tt> file in the
            <tt>resources/com/mycompany/mavenplatformmodulea</tt> directory to modify the version of the filesystem DTD to version 1.2.
            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem <strong>1.2//EN</strong>" "https://netbeans.org/dtds/<strong>filesystem-1_2.dtd</strong>"&gt;
&lt;filesystem&gt;

&lt;/filesystem&gt;</pre>
            </li>
            <li>Edit the <tt>layer.xml</tt> file to add the following elements (in bold).
            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "https://netbeans.org/dtds/filesystem-1_2.dtd"&gt;
&lt;filesystem&gt;
    <strong>&lt;folder name="Actions"&gt;
        &lt;folder name="Window"&gt;
            &lt;file name="com-mycompany-mavenplatformmodulea-HelloWorldAction.instance"&gt;
                &lt;attr name="delegate" newvalue="com.mycompany.mavenplatformmodulea.HelloWorldAction"/&gt;
                &lt;attr name="displayName" bundlevalue="com.mycompany.mavenplatformmodulea.Bundle#CTL_HelloWorldAction"/&gt;
                &lt;attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/&gt;
            &lt;/file&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
    &lt;folder name="Menu"&gt;
        &lt;folder name="Window"&gt;
            &lt;file name="HelloWorldAction.shadow"&gt;
                &lt;attr name="originalFile" stringvalue="Actions/Window/com-mycompany-mavenplatformmodulea-HelloWorldAction.instance"/&gt;
            &lt;/file&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;</strong>
&lt;/filesystem&gt;</pre>
            <p>In this step you added a new item to the Window menu that will
                invoke <tt>HelloWorldAction</tt>.
            You also specify the <tt>bundle.properties</tt> file that specifies the display name for the new item.</p>
            </li>
            <li>Edit the <tt>bundle.properties</tt> file in the
            <tt>resources/com/mycompany/mavenplatformmodulea</tt> directory to add the following item (in bold)
            that specifies the name for the new Window menu item:
                <pre class="examplecode">
#OpenIDE-Module-Long-Description=
#OpenIDE-Module-Short-Description=
#OpenIDE-Module-Name=
<strong>CTL_HelloWorldAction=Hello World</strong></pre>
            </li>
            <li>Edit <tt>pom.xml</tt> to make the following changes (in bold) to add a dependency on
                <tt>org-openide-dialogs</tt> and modify the version of the <tt>org-openide-util</tt> artifact.
                <pre class="examplecode">
&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-openide-util&lt;/artifactId&gt;
        <strong>&lt;version&gt;${netbeans.version}&lt;/version&gt;</strong>
    &lt;/dependency&gt;
    <strong>&lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-openide-dialogs&lt;/artifactId&gt;
        &lt;version&gt;${netbeans.version}&lt;/version&gt;
    &lt;/dependency&gt;</strong>
&lt;/dependencies&gt;</pre>
                
            <p>You can use <tt>${netbeans.version}</tt> to ensure that the versions of artifacts are consistent
            and can be easily updated by updating the <tt>&lt;netbeans.version&gt;</tt> element in the
            POM of the parent project.</p>

            </li>
            <li>In the command line terminal, navigate to the <tt>mavenPlatformModuleA</tt> directory and
                type and run the following command to build and install the module in the local repository.
            <pre class="examplecode">mvn install</pre>
            <p>When you run the <tt>install</tt> command, Maven builds the module and copies the JAR and NBM artifacts to the
            local repository.</p>
            </li>
        </ol>
        <p>Now that the artifact is in the local repository, you can add the artifact as a dependency of the platform application.</p>


<!-- =================================================================== -->
<!-- ++++++++++++++ Adding the Module as a Dependency ++++++++++++++++++ -->

        <h2><a name="04"></a>Adding the New Module as a Dependency</h2>
        <p>In this section you will add the module as a dependency of the NetBeans Platform
        application by declaring the dependency in the POM of the application project.</p>
        <ol>
            <li>Open the <tt>pom.xml</tt> file in the <tt>application</tt> directory in a text editor.</li>
            <li>Declare the mavenplatformmodulea module as a dependency of the application by making the following changes (in bold) to the POM.
            <pre class="examplecode">
 &lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.cluster&lt;/groupId&gt;
        &lt;artifactId&gt;platform&lt;/artifactId&gt;
        &lt;version&gt;${netbeans.version}&lt;/version&gt;
        &lt;type&gt;pom&lt;/type&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.mycompany&lt;/groupId&gt;
        &lt;artifactId&gt;branding&lt;/artifactId&gt;
        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;/dependency&gt;
    <strong>&lt;dependency&gt;
        &lt;groupId&gt;com.mycompany&lt;/groupId&gt;
        &lt;artifactId&gt;mavenPlatformModuleA&lt;/artifactId&gt;
        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;/dependency&gt;</strong>
&lt;/dependencies&gt;</pre>
            </li>
        </ol>

<!-- =================================================================== -->
<!-- +++++++++++++++ Building the Application ++++++++++++++++++++++++++ -->

        <h2><a name="05"></a>Building the Application With the New Module</h2>
        <p>You are now almost ready to launch the NetBeans Platform application with the new module installed.
        You first need to make sure that the new module is specified as a module of the parent POM project.
        You can then repeat the steps to build and launch the application.</p>
        <ol>
            <li>Open the <tt>pom.xml</tt> in the <tt>mavenPlatformApp</tt> directory in a text editor.</li>
            <li>Confirm that the new module is specified in the list of modules that are included with the application.
            <pre class="examplecode">
&lt;modules&gt;
    &lt;module&gt;branding&lt;/module&gt;
    &lt;module&gt;application&lt;/module&gt;
    <strong>&lt;module&gt;mavenPlatformModuleA&lt;/module&gt;</strong>
&lt;/modules&gt;</pre>
            </li>
            <li>Navigate to the <tt>mavenPlatformApp</tt> directory in the command line terminal and
                type the following command to build the project.
                <pre class="examplecode">mvn --projects com.mycompany:application --also-make install</pre>
                <p>When you run the command, you can see that the new module is included
                in the list of modules.</p>
                <pre class="examplecode">[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO]   mavenPlatformApp - NetBeans Platform Application
[INFO]   mavenPlatformApp - Platform application branding resources
[INFO]   mavenPlatformModuleA NetBeans Module
[INFO]   mavenPlatformApp - NetBeans Platform based application</pre>
            </li>
            <li>Navigate to the <tt>application</tt> directory and type the following command to launch the application.
            <pre class="examplecode">mvn nbm:run-platform</pre>
            <p>When you run the command, Maven will launch the application with the new module.</p>
            </li>
        </ol>
            
        <p>You have now successfully added a new module to the application and launched the application.
        To confirm that the module was loaded when the application launched,
        choose Window &gt; Hello World from the main menu of the application to open the new Message dialog box.<br/>
        <img src="../images/tutorials/maven-commandline/maven-command-hello-dialog.png" alt="Screenshot of Message Dialog" title="Screenshot of Message Dialog" class="margin-around b-all" />
        </p>

        <p class="tips">You can download an archive containing the sources of this application from the following link:</p>
        <ul>
            <li><a href="https://netbeans.org/projects/samples/downloads/download/Samples/Platform/mavenPlatformApp.zip">mavenPlatformApp.zip</a></li>
        </ul>
        <p class="notes"><strong>Note.</strong> To build and run the application from the archive,
        expand the archive and then execute the <tt>install</tt> and <tt>run-platform</tt> goals that are described above.
        Maven will automatically download any required artifacts to your local Maven repository.</p>


 
<!-- =================================================================== -->

    <p>This tutorial demonstrated how creating a NetBeans Platform application using Maven
    is not very different from creating an application using Ant.
    The major difference is understanding how the Maven POM controls how the application is assembled.
    For more examples on how to build NetBeans Platform applications and modules,
    see the tutorials listed in the <a href="https://netbeans.org/kb/trails/platform.html">NetBeans Platform Learning Trail</a>.</p>

 <!-- ======================================================================================== -->

<div class="feedback-box"><a name="feedback"></a>
    <a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20NetBeans%20Platform%20Application%20from%20Maven%20Archetypes">
        Send Us Your Feedback</a></div>

 <p>&nbsp;</p>
 <!-- ======================================================================================== -->
    <h2><a name="nextsteps"></a>See Also</h2>

    <p>This document described
    how to use the Maven build framework to create a new NetBeans Platform application without using NetBeans IDE.
    For more information about creating and developing applications, see the following resources.</p>
    <ul>
        <li><a href="https://platform.netbeans.org/tutorials/nbm-maven-quickstart.html">NetBeans Platform Quick Start Using Maven</a></li>
        <li><a href="https://netbeans.org/kb/trails/platform.html">NetBeans Platform Learning Trail</a></li>
        <li><a href="http://bits.netbeans.org/dev/javadoc/">NetBeans API Javadoc</a></li>
    </ul>

    <p>If you have any questions about the NetBeans Platform, feel free
     to write to the mailing list, dev@platform.netbeans.org, or view the
    <a href="https://netbeans.org/projects/platform/lists/dev/archive">NetBeans Platform mailing list archive</a>.</p>


    <!-- ======================================================================================== -->


</body>

</html>
