<!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 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, 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 6 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>
    <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.0.3 (rdebian-4)
Java version: 1.6.0_25
Java home: /home/geertjan/jdk1.6.0_25/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.38-13-generic" arch: "i386" Family: "unix"</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.10 
  archetype:generate</pre>        
            
            <p class="tips">Here it is on a single line:</p>
            
<pre class="examplecode">mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=netbeans-platform-app-archetype -DarchetypeVersion=1.10 archetype:generate</pre>
            
        </li>
        <li><p>When prompted, enter the following values:</p>
                <ul>
                    <li>groupId: <tt>com.mycompany</tt></li>
                    <li>artifactId: <tt>mavenPlatformApp</tt></li>
                    <li>version: &lt;press Enter to accept the default&gt;</li>
                    <li>package: &lt;press Enter to accept the default&gt;</li>
                    <li>netbeansVersion: <tt>RELEASE71-BETA</tt></li>
                </ul>
            
<!--            <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>
    <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.10</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: netbeansVersion, Value: RELEASE71-BETA
[INFO] Parameter: package, Value: com.mycompany
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformApp
[INFO] project created from Archetype in dir: /home/geertjan/NetBeansProjects/api-samples/versions/7.1/tutorials/mavenPlatformApp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 
[INFO] Finished at: Thu Dec 22 22:16:07 CET 2011
[INFO] Final Memory: 14M/147M</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:</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/maven2/&lt;/url&gt;
        &lt;/repository&gt;
    &lt;/repositories&gt;

    &lt;dependencyManagement&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.2&lt;/version&gt;
                &lt;scope&gt;test&lt;/scope&gt;
            &lt;/dependency&gt;
        &lt;/dependencies&gt;
    &lt;/dependencyManagement&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.6&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 --&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.2&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;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.3.1&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;RELEASE71-BETA&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>RELEASE71-BETA</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>

        <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 [59.580s]
[INFO] mavenPlatformApp-branding ............................. SUCCESS [15.814s]
[INFO] mavenPlatformApp-app .................................. SUCCESS [1:51.371s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 minutes 9 seconds
[INFO] Finished at: Mon Dec 19 19:32:34 CET 2011
[INFO] Final Memory: 28M/296M</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>
        <p>When you run the <tt>nbm-maven-plugin</tt> with the <tt>run-platform</tt> goal, Maven will
            launch your NetBeans Platform application:</p>
        <p>
        <img src="../../images/tutorials/maven-commandline/maven-command-platform-default-1.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/maven-command-platform-default-2.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>
        <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.9 
  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.9 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>RELEASE71-BETA</tt></li>
                </ul>

                <p>You can see that the command specifies <tt>nbm-archetype</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: netbeansVersion, Value: RELEASE71-BETA
[INFO] Parameter: package, Value: com.mycompany.mavenplatformmodulea
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.mycompany
[INFO] Parameter: artifactId, Value: mavenPlatformModuleA
[INFO] project created from Archetype in dir: /home/geertjan/NetBeansProjects/api-samples/versions/7.1/tutorials/mavenPlatformApp/mavenPlatformModuleA
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 30 seconds
[INFO] Finished at: Thu Dec 22 22:32:17 CET 2011
[INFO] Final Memory: 21M/257M</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>
            <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>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.ActionReferences;
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>Edit the 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;RELEASE71-BETA&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;RELEASE71-BETA&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;RELEASE71-BETA&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;RELEASE71-BETA&lt;/version&gt;
    &lt;/dependency&gt;</b>
&lt;/dependencies&gt;</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>
        <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>
        <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 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>
        <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.961s]
[INFO] mavenPlatformApp-branding ............................. SUCCESS [1.443s]
[INFO] mavenPlatformModuleA .................................. SUCCESS [0.464s]
[INFO] mavenPlatformApp-app .................................. SUCCESS [3.744s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Thu Dec 22 22:37:51 CET 2011
[INFO] Final Memory: 28M/310M</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 display the
        greeting:<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>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%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>
