<!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 Maven 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="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, 2011, 2012, 2013, 2014 Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
    </head>
    <body>

        <h1>NetBeans Platform Maven Command Line Tutorial</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><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 NetBeans Module from an Archetype</a></li>
            <li><a href="#04">Adding the New NetBeans Module as a Dependency</a></li>
            <li><a href="#05">Building the NetBeans Platform Application With the New NetBeans 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 7 or above</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td>
                    <td class="tbltd1">version 3.0.3 or higher,
                        though 2.x versions may still work.</td>
                </tr>
            </tbody>
        </table>

        <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>
        <div class="indent">

            <ol>
                <li>Install <a href="http://maven.apache.org/">Maven</a>.</li>
                <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, such as the following:</p>
<pre class="examplecode">Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T15:51:42+02:00)
Maven home: C:\apache-maven-3.2.2
Java version: 1.8.0-ea, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"</pre></li>
                <li>Navigate to the directory where you want to create the NetBeans Platform application.</li>
                <li>Type the following command, on a single line, in a terminal window
                    (also known as the command prompt):

                    <pre class="examplecode">mvn 
  -DarchetypeGroupId=org.codehaus.mojo.archetypes 
  -DarchetypeArtifactId=netbeans-platform-app-archetype 
  -DarchetypeVersion=1.19 
  -DgroupId=com.mycompany
  -DartifactId=mavenPlatformApp
  -Dversion=1.0-SNAPSHOT
  -Dpackage=com.mycompany
  -DnetbeansVersion=RELEASE80
  archetype:generate</pre>        

                    <p class="tips">Here it is on a single line, so that you can easily copy/paste it:</p>

                    <pre class="examplecode">mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=netbeans-platform-app-archetype -DarchetypeVersion=1.19 -DgroupId=com.mycompany -DartifactId=mavenPlatformApp -Dversion=1.0-SNAPSHOT -Dpackage=com.mycompany -DnetbeansVersion=RELEASE80 archetype:generate</pre>

                </li>
                <li><p>When prompted, enter Y, for "Yes".</p>

                    <!--            <pre class="examplecode">mvn -DarchetypeVersion=1.10 
                    -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.1:generate</pre>
                                
                                <p>Here is the same command on one line:</p>
                                
                            <pre class="examplecode">mvn -DarchetypeVersion=1.10 -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.1:generate</pre>
                    -->        </li>
            </ol>

        </div>

        <p>You can see that the command specifies the archetype that Maven will use to create
            the NetBeans Platform application (<a href="http://search.maven.org/#search|ga|1|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.19</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
            Mavenized NetBeans Platform application,
            the IDE executes a Maven goal with the same 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>.</p>

        <p>When you run the command, you will see output similar to the following in the terminal window.</p>
        <pre class="examplecode">[INFO] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformApp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.mycompany
[INFO] Parameter: packageInPathFormat, Value: com/mycompany
[INFO] Parameter: package, Value: com.mycompany
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: netbeansVersion, Value: RELEASE80
[INFO] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformApp
[INFO] project created from Archetype in dir: C:\apps\mavenPlatformApp
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -------------------------------------------------------------------
[INFO] Total time: 12.396 s
[INFO] Finished at: 2014-07-07T08:44:23+02:00
[INFO] Final Memory: 16M/133M</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/>
        </p><p><img src="../images/tutorials/maven-commandline/80/p1.png" alt="Screenshot of structure of mavenPlatformApp" title="Screenshot of structure of mavenPlatformApp"  />
        </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:</p>

        <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&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-parent&lt;/artifactId&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;packaging&gt;pom&lt;/packaging&gt;

    &lt;name&gt;mavenPlatformApp-parent&lt;/name&gt;

    &lt;repositories&gt;
        &lt;!--
        Repository hosting NetBeans modules, especially APIs.
        Versions are based on IDE releases, e.g.: RELEASE691
        To create your own repository, use: nbm:populate-repository
        --&gt;
        &lt;repository&gt;
            &lt;id&gt;netbeans&lt;/id&gt;
            &lt;name&gt;NetBeans&lt;/name&gt;
            &lt;url&gt;http://bits.netbeans.org/nexus/content/groups/netbeans/&lt;/url&gt;
        &lt;/repository&gt;
    &lt;/repositories&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.13&lt;/version&gt;
                    &lt;extensions&gt;true&lt;/extensions&gt;
                    &lt;configuration&gt;
                        &lt;brandingToken&gt;${brandingToken}&lt;/brandingToken&gt;
                        &lt;cluster&gt;${brandingToken}&lt;/cluster&gt;
                    &lt;/configuration&gt;
                &lt;/plugin&gt;
                &lt;plugin&gt;
                    &lt;!-- NetBeans 6.9+ requires JDK 6, starting NetBeans 7.4 source 1.7 is required --&gt;
                    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
                    &lt;version&gt;2.5.1&lt;/version&gt;
                    &lt;configuration&gt;
                        &lt;source&gt;1.7&lt;/source&gt;
                        &lt;target&gt;1.7&lt;/target&gt;
                    &lt;/configuration&gt;
                &lt;/plugin&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
                &lt;version&gt;2.4&lt;/version&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;RELEASE80&lt;/netbeans.version&gt;
        &lt;brandingToken&gt;mavenplatformapp&lt;/brandingToken&gt;
    &lt;/properties&gt;

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

        <p class="tips">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>RELEASE72</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.</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 reactor 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>

        <div class="indent">

            <ol>
                <li>Navigate to the <tt>mavenPlatformApp</tt> directory and type the following command to
                    build the project:
                    <pre class="examplecode">mvn install</pre>
                    <p class="tips">The above command will take some time to complete. When the command
                        completes, you will see the following:</p>

                    <pre class="examplecode">[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mavenPlatformApp-parent ........................... SUCCESS [0.533s]
[INFO] mavenPlatformApp-branding ......................... SUCCESS [8.684s]
[INFO] mavenPlatformApp-app .............................. SUCCESS [33.900s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:31.177s
[INFO] Finished at: Sat Sep 15 23:36:18 CEST 2012
[INFO] Final Memory: 18M/59M
[INFO] ------------------------------------------------------------------------</pre>

                </li>
                <li>After the command above completes, 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>

        </div>

        <p>When you run the <tt>nbm-maven-plugin</tt> with the <tt>run-platform</tt> goal, as done above, Maven will
            launch your NetBeans Platform application:</p>
        <p>
            <img src="../images/tutorials/maven-commandline/72/p2.png" alt="Screenshot of default application" title="Screenshot of default application" class="margin-around b-all" />
        </p>
        <p>Browse through the menus to see what your new application consists of. Open
            some windows, undock some of them, and you will have something that looks like this:</p>
        <p>
            <img src="../images/tutorials/maven-commandline/72/p3.png" alt="Screenshot of default application" title="Screenshot of default application" class="margin-around b-all" />
        </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 NetBeans 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.
            You will then build the module to install the module in the local repository.</p>

        <div class="indent">

            <ol>
                <li>Navigate to the <tt>mavenPlatformApp</tt> directory in the command line
                    terminal and run the following command:

                    <pre class="examplecode">mvn 
  -DarchetypeGroupId=org.codehaus.mojo.archetypes 
  -DarchetypeArtifactId=nbm-archetype 
  -DarchetypeVersion=1.11 
  archetype:generate</pre>        

                    <p class="tips">Here it is on a single line:</p>

                    <pre class="examplecode">mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=nbm-archetype -DarchetypeVersion=1.11 archetype:generate</pre>

                </li>
                <li><p>When prompted, enter the following values:</p>
                    <ul>
                        <li>groupId: <tt>com.mycompany</tt></li>
                        <li>artifactId: <tt>mavenPlatformModuleA</tt></li>
                        <li>version: &lt;press Enter to accept the default&gt;</li>
                        <li>package: <tt>com.mycompany.mavenplatformmodulea</tt></li>
                        <li>netbeansVersion: <tt>RELEASE72</tt></li>
                    </ul>

                    <p>You can see that the command specifies <tt><a href="http://search.maven.org/#search%7Cga%7C1%7Cnbm-archetype">nbm-archetype</a></tt>.
                        The archetype will be retrieved from the 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] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformModuleA
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.mycompany.mavenplatformmodulea
[INFO] Parameter: packageInPathFormat, Value: com/mycompany/mavenplatformmodulea

[INFO] Parameter: package, Value: com.mycompany.mavenplatformmodulea
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: netbeansVersion, Value: RELEASE72
[INFO] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformModuleA
[INFO] project created from Archetype in dir: C:\Users\Geertjan\demo\mavenPlatformApp\mavenPlatformModuleA
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mavenPlatformApp-parent ........................... SUCCESS [58.613s]
[INFO] mavenPlatformApp-branding ......................... SKIPPED
[INFO] mavenPlatformApp-app .............................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:00.058s
[INFO] Finished at: Sat Sep 15 23:52:13 CEST 2012
[INFO] Final Memory: 19M/131M
[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 file <tt>bundle.properties</tt> is generated in the
                        <tt>resources/com/mycompany/mavenplatformmodulea</tt> directory:</p>
                </p><p><img src="../images/tutorials/maven-commandline/72/p4.png" alt="Screenshot of structure of mavenplatformmodulea" title="Screenshot of structure of mavenplatformmodulea" />
                    <p>In the next step you will create a class in the
                        <tt>java/com/mycompany/mavenplatformmodulea</tt> directory.</p>
                </li>
                <li>Edit the new module's <tt>pom.xml</tt> to make the following changes (in bold) to add a dependency on
                    the modules you are referring to in the code above.
                    <pre class="examplecode">&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-netbeans-api-annotations-common&lt;/artifactId&gt;
        &lt;version&gt;RELEASE72&lt;/version&gt;
    &lt;/dependency&gt;
    <b>&lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-openide-util&lt;/artifactId&gt;
        &lt;version&gt;RELEASE72&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-openide-awt&lt;/artifactId&gt;
        &lt;version&gt;RELEASE72&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-openide-dialogs&lt;/artifactId&gt;
        &lt;version&gt;RELEASE72&lt;/version&gt;
    &lt;/dependency&gt;</b>
&lt;/dependencies&gt;</pre>

                </li>
                <li>Use a text editor to create the following class <tt>HelloWorldActionListener.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;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;

@ActionID(category = "Window",
id = "com.mycompany.mavenproject2.HelloWorldActionListener")
@ActionRegistration(displayName = "#CTL_HelloWorldActionListener")
@ActionReference(path = "Menu/Window", position = 0)
@Messages("CTL_HelloWorldActionListener=Hello World")
public final class HelloWorldActionListener implements ActionListener {

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

}</pre>
                </li>
                <li>On the command line, navigate to the <tt>mavenPlatformModuleA</tt> directory 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>

        </div>

        <p>Now that the artifact is in the local repository, you can add the artifact
            as a dependency of the NetBeans Platform application, as shown in
            the next section.</p>


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

        <h2><a name="04"></a>Adding the New NetBeans 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>

        <div class="indent">

            <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;${project.groupId}&lt;/groupId&gt;
        &lt;artifactId&gt;mavenPlatformApp-branding&lt;/artifactId&gt;
        &lt;version&gt;${project.version}&lt;/version&gt;
    &lt;/dependency&gt;
    <b>&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;</b>
    &lt;!-- NbModuleSuite functional in RELEASE70 or later: --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-netbeans-modules-nbjunit&lt;/artifactId&gt;
        &lt;version&gt;${netbeans.version}&lt;/version&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;!-- To use Jelly Tools in your functional tests, add or replace with:
    &lt;dependency&gt;
        &lt;groupId&gt;org.netbeans.api&lt;/groupId&gt;
        &lt;artifactId&gt;org-netbeans-modules-jellytools-platform&lt;/artifactId&gt;
        &lt;version&gt;${netbeans.version}&lt;/version&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
    --&gt;
&lt;/dependencies&gt;</pre>
                </li>
            </ol>
        </div>
        <!-- =================================================================== -->
        <!-- +++++++++++++++ Building the Application ++++++++++++++++++++++++++ -->

        <h2><a name="05"></a>Building the NetBeans Platform Application With the New NetBeans 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>
        <div class="indent">
            <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 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] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mavenPlatformApp-parent ........................... SUCCESS [0.144s]
[INFO] mavenPlatformApp-branding ......................... SUCCESS [2.044s]
[INFO] mavenPlatformModuleA .............................. SUCCESS [0.491s]
[INFO] mavenPlatformApp-app .............................. SUCCESS [7.790s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.724s
[INFO] Finished at: Sun Sep 16 00:00:00 CEST 2012
[INFO] Final Memory: 16M/226M
[INFO] ------------------------------------------------------------------------</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>
        </div>
        <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 display the
            greeting:<br/>
            <img src="../images/tutorials/maven-commandline/72/p5.png" alt="Screenshot of Message Dialog" title="Screenshot of Message Dialog" />
            <img src="../images/tutorials/maven-commandline/72/p6.png" alt="Screenshot of Message Dialog" title="Screenshot of Message Dialog" />
        </p>

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

        <p>This tutorial demonstrated how you can use the Maven command line to create NetBeans
            Platform applications.
            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%207.1">
                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>
