| <!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 Quick Start Using Maven</title> |
| <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/> |
| <meta name="AUDIENCE" content="NBUSER"/> |
| <meta name="TYPE" content="ARTICLE"/> |
| <meta name="EXPIRES" content="N"/> |
| <meta name="indexed" content="y"/> |
| <meta name="description" |
| content="A short demonstration of how to create a simple |
| NetBeans Platform application and module and use Maven for the build framework."/> |
| <!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> |
| <!-- Use is subject to license terms.--> |
| <style type="text/css"> |
| .examplecode {overflow:auto;width:680px; } |
| </style> |
| |
| </head> |
| <body> |
| |
| <h1>NetBeans Platform Quick Start Using Maven</h1> |
| |
| <p>Welcome to the <a href="https://platform.netbeans.org/"><b>NetBeans Platform</b></a>!</p> |
| |
| <p>This document is a quick demonstration of how to create a simple |
| NetBeans Platform application and module and use Maven for the build framework. |
| In this document you will use Maven archetypes to create the NetBeans Platform application and module. |
| You will use the Swing UI toolkit and "Matisse" GUI Builder to create a window component in the module. |
| The modular aspect of the NetBeans Platform enables you to develop and expand the functionality |
| of your application simply by adding new modules. |
| </p> |
| |
| <p>This document is based on the Ant-based <a href="nbm-quick-start.html">NetBeans Platform Quick Start for NetBeans Platform</a>. |
| and illustrates some of the differences between using Ant and Maven to develop NetBeans Platform applications. |
| After you understand how Maven is different from Ant, you can easily proceed through other |
| tutorials on the <a href="https://netbeans.org/kb/trails/platform.html">NetBeans Platform Learning Trail</a>.</p> |
| |
| <p class="tips">If you are using NetBeans IDE 6.8, see the |
| <a href="68/nbm-maven-quickstart.html">Quick Start for NetBeans Platform 6.8 Using Maven</a>.</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> |
| <p><img src="../images/articles/69/netbeans-stamp69.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8" title="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8"/></p> |
| |
| <ul class="toc"> |
| <li><a href="#config">Configuring Maven</a></li> |
| <li><a href="#01">Creating the NetBeans Platform Application Project</a> |
| <ul> |
| <li><a href="#01a">Modifying the Branding Elements</a></li> |
| </ul> |
| </li> |
| <li><a href="#02">Creating the MavenWordEngine Module</a> |
| <ul> |
| <li><a href="#02b">Making the Module a Dependency</a></li> |
| <li><a href="#02c">Adding a Window Component</a></li> |
| </ul> |
| </li> |
| <li><a href="#04">Creating the TextFilter Module</a> |
| <ul> |
| <li><a href="#04b">Making the Module a Dependency</a></li> |
| <li><a href="#04c">Adding an Interface</a></li> |
| <li><a href="#04d">Making the Module Public</a></li> |
| </ul> |
| </li> |
| <li><a href="#05">Creating the MyFilter Module</a> |
| <ul> |
| <li><a href="#05b">Adding TextFilter as a Dependency</a></li> |
| <li><a href="#05c">Adding a Java Class</a></li> |
| <li><a href="#05d">Calling the Method From the MavenWordEngine Module</a></li> |
| </ul> |
| </li> |
| <li><a href="#06">Adding a Listener and Content Field</a></li> |
| <li><a href="#07">Creating the History Module</a> |
| <ul> |
| <li><a href="#07b">Adding a Window Component</a></li> |
| </ul> |
| </li> |
| <li><a href="#08">Running the Application</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://download.netbeans.org/">NetBeans IDE</a></td> |
| <td class="tbltd1">version 6.9</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td> |
| <td class="tbltd1">Version 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">Note:</strong> You do not need to download a separate version |
| of the NetBeans Platform to develop applications for the NetBeans Platform. |
| Typically, you develop the applications and modules in the NetBeans IDE and |
| then only include the modules that are necessary to run the NetBeans Platform and your application.</p> |
| |
| <p>Before starting this tutorial you may want to familiarize yourself with |
| the following documentation.</p> |
| <ul> |
| <li><a href="http://wiki.netbeans.org/MavenBestPractices">Best Practices for Apache Maven in NetBeans 6.x</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> |
| <li><a href="https://netbeans.org/kb/docs/java/gui-functionality.html">Introduction to GUI Building</a></li> |
| </ul> |
| |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++++ Configuring Maven +++++++++++++++++++++++++++++++++ --> |
| |
| <h2><a name="config"></a>Configuring Maven</h2> |
| <p>If this is your first Maven project you will want to check the Maven configuration settings in the Options window. |
| To complete this tutorial you must have Maven installed on your local system. |
| You can download the installer from the <a href="http://maven.apache.org/">Maven site</a>.</p> |
| |
| <ol> |
| <li>Select the Miscellaneous category in the Options window and click the Maven tab.</li> |
| <li>Specify the location of your local Maven installation (requires 2.0.9 or newer).</li> |
| <li>Check that the location of the local Maven repository is correct.</li> |
| <li>Click OK.</li> |
| </ol> |
| <p>In most cases, if your Maven configuration is typical the information in the Options window should already be correct.</p> |
| |
| <p class="notes"><strong>Note.</strong> Maven support is activated as part of the Java SE feature set. |
| If the Maven tab is not available in the Options window, confirm that Java SE is activated by creating a Java application.</p> |
| |
| <p>The IDE uses Maven SCM to checkout Maven artifacts. |
| You might want to check that any clients necessary for checking out sources are installed on your local machine and configured correctly.</p> |
| <p class="tips">For details on Maven SCM, see the |
| <a href="http://maven.apache.org/scm/index.html">Maven SCM page</a>.</p> |
| |
| <div class="indent"> |
| <h3><a name="config1"></a>Viewing the Maven Repositories</h3> |
| <p>The artifacts that are used by Maven to build all your projects are stored in your local Maven repository. |
| When an artifact is declared as a project dependency, the artifact is downloaded to your local repository |
| from one of the registered remote repositories.</p> |
| |
| <p>The NetBeans repository and several well-known indexed Maven repositories are registered and listed in the Repository Browser window by default. |
| The NetBeans repository contains most of the public artifacts necessary for you to build your project. |
| You can use the Maven Repository Browser to view the contents of your local and remote repositories. |
| You can expand the Local Repository node to see the artifacts that are present locally. |
| The artifacts listed under the NetBeans repository nodes can be added as project dependencies, but not all of |
| them are present locally. They are only added to the Local Repository when they are declared as project |
| dependencies.</p> |
| |
| <p>To open the Maven Repository Browser:</p> |
| <ul> |
| <li>Choose Window > Other > Maven Repository Browser from the main menu.<br/> |
| <img src="../images/tutorials/maven-quickstart68/maven-nbm-netbeans-repo.png" alt="Screenshot of Maven Repository Browser" title="Screenshot of Maven Repository Browser" class="margin-around b-all" /> |
| </li> |
| </ul> |
| |
| |
| <p>When your cursor is over an artifact, the IDE displays a tooltip with the artifact's coordinates. |
| You can view additional details about an artifact by double-clicking the artifact's JAR file in the browser.</p> |
| |
| <p class="tips">You can search for an artifact by clicking the Find button in the toolbar of the Maven Repository Browser |
| or by using the Quicksearch textfield in the main toolbar.</p> |
| <p class="tips">For more about managing Maven classpath dependencies and working with Maven repositories in the IDE, |
| see the <a href="http://wiki.netbeans.org/MavenBestPractices#Dependency_management">Dependency Management</a> |
| section of <a href="http://wiki.netbeans.org/MavenBestPractices">Best Practices for Apache Maven in NetBeans 6.x</a>. |
| </p> |
| <p class="tips">To see a demonstration of using the Artifact Viewer, see the <a href="https://netbeans.org/kb/docs/java/maven-dependencies-screencast.html"> Working with Maven Dependencies</a> screencast.</p> |
| |
| </div> |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++++ Creating the Platform Application +++++++++++++++++ --> |
| |
| <h2><a name="01"></a>Creating the NetBeans Platform Application Project</h2> |
| |
| <p>In this section you use the New Project wizard to create a |
| NetBeans Application from a Maven archetype. |
| The wizard will create the Maven module projects that you need to develop an application on the NetBeans Platform. |
| The wizard also provides the option of creating a NetBeans module in the application project, but in this tutorial |
| you will create each module individually.</p> |
| |
| <div class="indent"> |
| <h3>Creating the Project</h3> |
| |
| <p>Perform the following steps to create the NetBeans Platform application using the New Project wizard.</p> |
| <ol> |
| <li>Choose File > New Project (Ctrl-Shift-N) to open the New Project wizard.</li> |
| <li>Select Maven NetBeans Application from the Maven category. Click Next.</li> |
| <li>Type <strong>MavenPlatformWordApp</strong> for the Project Name and set the Project Location. Click Finish. <br/> |
| <img src="../images/tutorials/maven-quickstart/maven-newproject.png" alt="Screenshot of New Project wizard" title="Screenshot of New Project wizard" class="margin-around b-all" /> |
| </li> |
| </ol> |
| |
| <p class="notes"><strong>Note.</strong> If this is your first NetBeans Platform application using Maven, |
| it can take some time to create the projects because the IDE needs to download any necessary artifacts |
| from the NetBeans repository.</p> |
| |
| <p>When you click Finish, by default the IDE creates the following Maven project types.</p> |
| <ul> |
| <li><strong>NetBeans Platform Application.</strong> |
| This project is a container project for the Platform application and lists the modules to include and the location of the project's repositories. This project does not contain any sources. |
| The IDE generates the modules containing the sources and resources in sub-directories of this project.</li> |
| <li><strong>NetBeans Platform based application.</strong> |
| This project specifies the artifacts (sources) needed for compiling the application. |
| The required dependencies (IDE artifacts, module artifacts) are specified in the <tt>pom.xml</tt> file of the project. |
| If you expand the Libraries node you can see the libraries required for the NetBeans Platform application.</li> |
| <li><strong>Platform application branding resources.</strong> |
| This project contains the resources used for branding the application. </li> |
| </ul> |
| |
| <p>For all Maven projects, the <tt>pom.xml</tt> file (POM) is located under the Project Files node in the Projects window. |
| If you look at the POM for the NetBeans Platform Application project, |
| you can see that the two other modules created by the wizard are listed as modules in the application.</p> |
| <pre class="examplecode"> |
| <modules> |
| <module>branding</module> |
| <module>application</module> |
| </modules> |
| </pre> |
| |
| |
| <h3><a name="01a"></a>Modifying the Branding Elements</h3> |
| <p>The branding module specifies the branding resources that are used when building the Platform application. |
| The branding dialog enables you to easily modify the branding properties of the application to change the name, |
| splash screen and the values of text elements.</p> |
| |
| <p>When you create the NetBeans Platform application from the archetype, |
| the default name for the application is the artifactId of the application. |
| In this exercise you will use the branding wizard to modify the name of the application and |
| replace the default image for the splash screen.</p> |
| <p class="notes"><strong>Note.</strong> The IDE needs to build the branding module before you can modify the branding resources.</p> |
| <ol> |
| <li>Right-click the <strong>Platform application branding resources</strong> module and choose Branding.</li> |
| <li>In the Basic tab, modify the Application Title to <strong>My Maven Platform Word App</strong>.<br/> |
| <img src="../images/tutorials/maven-quickstart/maven-branding1.png" alt="Screenshot of New Project wizard" title="Screenshot of New Project wizard" class="margin-around b-all" /> |
| </li> |
| <li>Click the Splash Screen tab and click the Browse |
| button next to the default splash screen image to locate a different image. Click OK.</li> |
| <!--<li>Click the Resource Bundles tab and expand the <strong>org/netbeans/core/startup/Bundle.properties</strong> node.</li> |
| <li>Double-click <strong>CTL_About_Title</strong> and type a new title for the About dialog window. Click OK.<br/> |
| <img src="../images/tutorials/maven-quickstart/maven-branding2.png" alt="Screenshot of New Project wizard" title="Screenshot of New Project wizard" class="margin-around b-all" /> |
| </li>--> |
| </ol> |
| |
| |
| <p class="tips">You can copy the image below to your local system and specify the image as the splash screen in the Branding dialog.</p> |
| <img src="../images/tutorials/maven-quickstart68/splash.gif" alt="Example of default splash image" title="Example of default splash image" class="margin-around b-all" /> |
| |
| </div> |
| |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++++ Creating the MavenWordEngine Module +++++++++++++++ --> |
| |
| |
| <h2><a name="02"></a>Creating the MavenWordEngine Module</h2> |
| |
| <p>In this section you will create a new module named MavenWordEngine. |
| You will then modify the module to add a window component and a button and text area.</p> |
| |
| <div class="indent"> |
| <h3><a name="02a"></a>Creating the Module</h3> |
| <p>In this exercise you will create a new module project in the same directory that contains the branding module and application module.</p> |
| <ol> |
| <li>Choose File > New Project from the main menu.</li> |
| <li>Select Maven NetBeans Module from the Maven category. Click Next.</li> |
| <li>Type <strong>MavenWordEngine</strong> as the Project Name.</li> |
| <li>Click Browse and locate the MavenPlatformWordApp directory as the Project Location. Click Finish.</li> |
| </ol> |
| |
| <img src="../images/tutorials/maven-quickstart/maven-wizard-project-location.png" alt="Screenshot of New Project wizard" title="Screenshot of New Project wizard" class="margin-around b-all" /> |
| |
| |
| <p>If you look at the POM for the MavenWordEngine module you see that the <tt>artifactId</tt> of the project is <strong>MavenWordEngine</strong>.</p> |
| |
| <pre class="examplecode"> |
| <modelVersion>4.0.0</modelVersion> |
| <parent> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenPlatformWordApp</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| </parent> |
| <groupId>com.mycompany</groupId> |
| <artifactId><strong>MavenWordEngine</strong></artifactId> |
| <packaging>nbm</packaging> |
| <version>1.0-SNAPSHOT</version> |
| <name>MavenWordEngine NetBeans Module</name> |
| </pre> |
| |
| <p>To build a NetBeans module you need to use the <tt>nbm-maven-plugin</tt>. |
| If you look at the POM for the module, you can see that the IDE automatically |
| specified <tt>nbm</tt> for the <tt>packaging</tt> and that the <strong>nbm-maven-plugin</strong> |
| is specified as a build plugin.</p> |
| |
| <pre class="examplecode"> |
| <plugin> |
| <groupId>org.codehaus.mojo</groupId> |
| <artifactId><strong>nbm-maven-plugin</strong></artifactId> |
| <version>3.2-SNAPSHOT</version> |
| <extensions>true</extensions> |
| </plugin> |
| </pre> |
| |
| <p>If you look at the POM for the NetBeans Platform Application, |
| you can see that <strong>MavenWordEngine</strong> was added to the list of the modules in the application.</p> |
| |
| <pre class="examplecode"> |
| <modules> |
| <module>branding</module> |
| <module>application</module> |
| <module><strong>MavenWordEngine</strong></module> |
| </modules> |
| </pre> |
| |
| <h3><a name="02b"></a>Making the Module a Dependency of MavenPlatformWordApp</h3> |
| <p>In this exercise you will declare the MavenWordEngine module as a dependency of the NetBeans Platform based application |
| by adding the dependency in the POM. |
| The POM for the application declares the following dependencies.</p> |
| <pre class="examplecode"><dependencies> |
| <dependency> |
| <groupId>org.netbeans.cluster</groupId> |
| <artifactId>platform</artifactId> |
| <version>${netbeans.version}</version> |
| <type>pom</type> |
| </dependency> |
| <dependency> |
| <groupId>com.mycompany</groupId> |
| <artifactId>branding</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| </dependency> |
| </dependencies></pre> |
| |
| <p>If you expand the Libraries node for the NetBeans Platform based application you can see that there is a dependency on |
| the branding module and on some other libraries that are dependencies of the cluster required to build the application.</p> |
| <img src="../images/tutorials/maven-quickstart/maven-projects-libraries.png" alt="Screenshot of Libraries node" title="Screenshot of Add Dependency dialog" class="margin-around b-all" /> |
| <p class="tips">You can expand the list of non-classpath dependencies to see the full list of dependencies.</p> |
| |
| <p>To add the dependency to the POM, you can edit the POM directly in the editor or by opening the Add Dependency dialog box from the Projects window.</p> |
| |
| <ol> |
| <li>Expand the <strong>MavenPlatformWordApp - NetBeans Platform based application</strong> in the Projects window.</li> |
| <li>Right-click the Libraries node and choose Add Dependency.</li> |
| <li>Click the Open Projects tab and select <strong>MavenWordEngine</strong>. Click OK.</li> |
| </ol> |
| <img src="../images/tutorials/maven-quickstart/maven-add-dependency1.png" alt="Screenshot of Add Dependency dialog" title="Screenshot of Add Dependency dialog" class="margin-around b-all" /> |
| |
| <p class="notes"><strong>Note.</strong> The new project will appear in the dialog after the IDE finishes scanning and updating indexes.</p> |
| |
| <p>If you expand the Libraries node of MavenPlatformWordApp in the Projects window, |
| you can see that MavenWordEngine is now listed as a dependency.</p> |
| |
| <h3><a name="02c"></a>Adding a Window Component to the Module</h3> |
| |
| <p>In this exercise you will use a wizard to add a Window Component to the MavenWordEngine module.</p> |
| <ol> |
| <li>Right-click <strong>MavenWordEngine NetBeans Module</strong> in the Projects window and choose New > Other to open the New File wizard.</li> |
| <li>Select Window in the Module Development category. Click Next.</li> |
| <li>Select <strong>output</strong> in the Window Position dropdown list. Click Next.<br/> |
| <img src="../images/tutorials/maven-quickstart/maven-new-window.png" alt="Screenshot of window component page in New File wizard" title="Screenshot of window component page in New File wizard" class="margin-around b-all" /> |
| </li> |
| <li>Type <strong>Text</strong> in the Class Name Prefix field. Click Finish. |
| <p>The wizard displays a list of the files that will be created and the files that will be modified. </p></li> |
| </ol> |
| |
| |
| |
| <p>When you click Finish, in the Projects window you can see that the IDE generated the class <tt>TextTopComponent.java</tt> in <tt>com.mycompany.mavenwordengine</tt> under Source Packages. |
| The IDE also generated additional resource files in <tt>com.mycompany.mavenwordengine</tt> under Other Sources. |
| In this exercise you will only edit <tt>TextTopComponent.java</tt>.</p> |
| |
| <p>You can view the structure of the project in the Files window. |
| To compile a Maven project, only source files can be located under |
| Source Packages (<tt>src/main/java</tt> directory in the Files window). |
| Other resources (e.g., XML files) need to be located under Other Sources |
| (<tt>src/main/resources</tt> directory in the Files window). </p> |
| |
| <h3><a name="02d"></a>Modifying the Window Component</h3> |
| |
| <p>In this exercise you will add a text area and a button to the window component. |
| You will then modify the method invoked by the button to change the letters in the text area to upper case letters.</p> |
| <ol> |
| <li>Click the Design tab of <tt>TextTopComponent.java</tt> in the editor.</li> |
| <li>Drag and drop a button and a text area from the Palette onto the window.</li> |
| <li>Right-click the text area and choose Change Variable Name, and then type <strong>text</strong> as the name. |
| You will use the name when accessing the component from your code.</li> |
| <li>Set the text of the button to "<strong>Filter!</strong>".<br/> |
| <img src="../images/tutorials/maven-quickstart68/maven-nbm-textopcomponent.png" alt="Screenshot of window component page in New File wizard" title="Screenshot of window component page in New File wizard" class="margin-around b-all" /> |
| </li> |
| <li>Double-click the Filter! button element in the Design view to open the event handler method for the button in the source code editor. |
| The method is created automatically when you double-click the button element.</li> |
| <li>Modify the body of the method to add the following code. Save your changes. |
| <pre class="examplecode"> |
| private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { |
| <strong>String s = text.getText(); |
| s = s.toUpperCase(); |
| text.setText(s);</strong> |
| }</pre> |
| <p class="tips">You can use the code completion in the editor to help you type the code. </p> |
| </li> |
| </ol> |
| |
| <p>If you want to test that your application is working correctly, you can right-click the project node of the |
| <strong>MavenPlatformWordApp NetBeans Platform based application</strong> and choose Build with Dependencies.</p> |
| |
| <p>The default action mapped to Build with Dependencies is to build the project using the Reactor plugin. |
| When you build a project using the Reactor plugin, the dependencies of the sub-projects are built before the containing project is built. |
| The Output window displays the build order.</p> |
| |
| <img src="../images/tutorials/maven-quickstart/maven-buildwithdependencies1.png" alt="Screenshot of Reactor build order in Output window" title="Screenshot of Reactor build order in Output window" class="margin-around b-all" /> |
| |
| <p>The results of the build are also displayed in the Output window.</p> |
| |
| <img src="../images/tutorials/maven-quickstart/maven-buildwithdependencies2.png" alt="Screenshot of successful Reactor build in Output window" title="Screenshot of successful Reactor build in Output window" class="margin-around b-all" /> |
| |
| <p>If you look at the Projects window, you will see that the projects no longer have badges because |
| the artifacts of the required dependencies are now available in the Local repository under the <tt>com.mycompany</tt> node.</p> |
| |
| <img src="../images/tutorials/maven-quickstart/maven-localrepo.png" alt="Screenshot of Local repository" title="Screenshot of Local repository" class="margin-around b-all" /> |
| |
| <p>To run the project, right-click the project node of the <strong>MavenPlatformWordApp NetBeans Platform based application</strong> and choose Run. |
| After the application launches, you can test the application by performing the following steps.</p> |
| <ol> |
| <li>Choose Window > Text from the main menu of the platform application to open the Text window.</li> |
| <li>Type some lower case letters in the text area and click Filter! </li> |
| <li>Quit the Maven Platform Word App.</li> |
| </ol> |
| <p>When you click Filter!, the letters that you typed are changed to upper case and displayed in the text area. </p> |
| |
| </div> |
| |
| |
| |
| |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++ Creating the TextFilter Module ++++++++++++++++++++++ --> |
| |
| |
| <h2><a name="04"></a>Creating the TextFilter Module</h2> |
| |
| <p>In this exercise you will create a module named <b>TextFilter</b> |
| and add the module as a dependency to the application. |
| The TextFilter module will provide a service and only contain an interface. |
| You can then access the service from your other modules by using a lookup.</p> |
| |
| <div class="indent"> |
| <h3><a name="04a"></a>Creating the Module</h3> |
| <p>In this exercise you will perform the following steps to create the TextFilter module.</p> |
| |
| <ol> |
| <li> Choose File > New Project (Ctrl-Shift-N).</li> |
| <li> Select the Maven NetBeans Module archetype from the Maven category. Click Next.</li> |
| <li> Type <b>TextFilter</b> for the Project Name.</li> |
| <li> Click Browse to set the Project Location and locate the MavenPlatformWordApp directory. Click Finish.</li> |
| </ol> |
| |
| <p>When you click Finish, the IDE creates the module and opens the module project <b>TextFilter NetBeans Module</b> in the Projects window.</p> |
| <p>The IDE modifies <tt>pom.xml</tt> of the POM project MavenPlatformWordApp - NetBeans Platform Application |
| to add the new module to the list of modules to include in the project.</p> |
| |
| <pre class="examplecode"><modules> |
| <module>branding</module> |
| <module>application</module> |
| <module>MavenWordEngine</module> |
| <module>TextFilter</module> |
| </modules></pre> |
| |
| <p>After you create the module you need to add the module as a dependency of the application.</p> |
| |
| <h3><a name="04b"></a>Adding the TextFilter Module as a Dependency of MavenPlatformWordApp</h3> |
| |
| <p>In this exercise you add the TextFilter module as a dependency of the MavenPlatformWordApp NetBeans Platform based application.</p> |
| <ol> |
| <li>Right-click the Libraries node of the <strong>MavenPlatformWordApp - NetBeans Platform based application</strong> project and choose Add Dependency.</li> |
| <li>Click the Open Projects tab in the Add Dependency dialog.</li> |
| <li>Select the <strong>TextFilter NetBeans Module</strong> module. Click OK.</li> |
| </ol> |
| |
| <p>When you click OK, the IDE adds the module as a dependency of the project. |
| If you expand the Libraries node, you can see that the module is added to the list of dependencies. |
| In the POM for <strong>MavenPlatformWordApp - NetBeans Platform based application</strong>, |
| you can see that the IDE added the following lines inside the <tt>dependencies</tt> element.</p> |
| |
| <pre class="examplecode"><dependency> |
| <groupId>${project.groupId}</groupId> |
| <artifactId>TextFilter</artifactId> |
| <version>${project.version}</version> |
| </dependency></pre> |
| |
| |
| |
| <h3><a name="04c"></a>Adding an Interface to the TextFilter Module</h3> |
| <p>In this exercise you will add a simple interface to the TextFilter module.</p> |
| |
| <ol> |
| <li> Right-click the <strong>TextFilter NetBeans Module</strong> and choose New > Java Interface.</li> |
| <li> Type <strong>TextFilter</strong> as the Class Name.</li> |
| <li> Select <b>com.mycompany.textfilter</b> in the Package dropdown list. Click Finish.</li> |
| <li> Modify the class to add the following code. Save your changes.</li> |
| </ol> |
| <pre class="examplecode">package com.mycompany.textfilter; |
| |
| public interface TextFilter { |
| <strong>public String process(String s);</strong> |
| }</pre> |
| |
| |
| <h3><a name="04d"></a>Making the TextFilter Module Public</h3> |
| <p>In this exercise you will make the contents of the <tt>com.mycompany.textfilter</tt> package |
| public so that other modules can access the methods. |
| To declare a package as public, you modify |
| the <tt>configuration</tt> element of <tt>nbm-maven-plugin</tt> in the POM to specify the packages that are exported as public by the plugin. |
| You can make the changes to the POM in the editor or by selecting the packages to be made public in the project's Properties dialog box. |
| </p> |
| |
| |
| <ol> |
| <li> Right-click the <strong>TextFilter NetBeans Module</strong> and choose Properties.</li> |
| <li> Select the Public Packages category in the Project Properties dialog.</li> |
| <li> Select the <strong>com.mycompany.textfilter</strong> package. Click OK.</li> |
| </ol> |
| <img src="../images/tutorials/maven-quickstart/maven-public-packages.png" alt="Screenshot of Properties dialog" title="Screenshot of Properties dialog" class="margin-around b-all" /> |
| |
| |
| <p>When you click OK, the IDE modifies the project POM to modify the <tt>configuration</tt> element |
| of the <tt>nbm-maven-plugin</tt> artifact to add the following entries.</p> |
| |
| <pre><publicPackages> |
| <publicPackage>com.mycompany.textfilter</publicPackage> |
| </publicPackages></pre> |
| |
| <p>The POM entry now contains the following entries.</p> |
| <pre><plugin> |
| <groupId>org.codehaus.mojo</groupId> |
| <artifactId>nbm-maven-plugin</artifactId> |
| <version>3.2</version> |
| <extensions>true</extensions> |
| <configuration> |
| <publicPackages> |
| <publicPackage>com.mycompany.textfilter</publicPackage> |
| </publicPackages> |
| |
| </configuration> |
| </plugin></pre> |
| |
| |
| <p class="tips">For more information, see <a href="http://mojo.codehaus.org/nbm-maven-plugin/manifest-mojo.html#publicPackages" class="external text" title="http://mojo.codehaus.org/nbm-maven-plugin/manifest-mojo.html#publicPackages" rel="nofollow">nbm-maven-plugin manifest</a></p> |
| |
| </div> |
| |
| <!-- =================================================================== --> |
| <!-- +++++++++++++ Creating the MyFilter Module ++++++++++++++++++++++++ --> |
| |
| |
| <h2><a name="05"></a>Creating the MyFilter Module</h2> |
| <p>In this exercise you will create the module <b>MyFilter</b> and add the module as a dependency of TextFilter. |
| You can then call methods in MyFilter by looking up the TextFilter service.</p> |
| <div class="indent"> |
| |
| <h3><a name="05a"></a>Creating the Module</h3> |
| <p>In this exercise you will create a module named <strong>MyFilter</strong>. |
| To create the module, you will perform the same steps that you performed when you created the TextFilter module.</p> |
| |
| <ol> |
| <li> Choose File > New Project (Ctrl-Shift-N).</li> |
| <li> Select Maven NetBeans Module from the Maven category. Click Next.</li> |
| <li> Type <b>MyFilter</b> for the Project Name.</li> |
| <li> Click Browse to set the Project Location and locate the <strong>MavenPlatformWordApp</strong> directory. Click Finish.</li> |
| <li> Add the MyFilter module as a dependency of the <b>MavenPlatformWordApp - NetBeans Platform based application</b> project.</li> |
| </ol> |
| |
| |
| <h3><a name="05b"></a>Adding the TextFilter Module as a Dependency</h3> |
| <p>In this exercise you add the TextFilter module as a dependency of the MyFilter module.</p> |
| |
| <ol> |
| <li>Right-click the Libraries node of the <b>MyFilter</b> project and choose Add Dependency.</li> |
| <li>Click the Open Projects tab in the Add Dependency dialog.</li> |
| <li>Select the <strong>TextFilter</strong> module. Click OK.</li> |
| </ol> |
| |
| <h3><a name="05c"></a>Modifying the MyFilter Module</h3> |
| <p>In this exercise you will add a Java class with a single method that is named <tt>process</tt> |
| that converts a string to upper case. |
| You will also specify that the class will implement the TextFilter interface. |
| You will use an <tt>@ServiceProvider</tt> annotation to specify that TextFilter is a service |
| that will be registered at compile time.</p> |
| |
| <ol> |
| <li> Right-click the <b>MyFilter</b> module and choose New > Java Class.</li> |
| <li> Type <b>UpperCaseFilter</b> as the Class Name.</li> |
| <li> Select <b>com.mycompany.myfilter</b> in the Package dropdown list. Click Finish.</li> |
| <li> Modify the class to add the following code. Save your changes.</li> |
| </ol> |
| |
| <pre>package com.mycompany.myfilter; |
| |
| import com.mycompany.textfilter.TextFilter; |
| import org.openide.util.lookup.ServiceProvider; |
| |
| <strong>@ServiceProvider(service=TextFilter.class)</strong> |
| public class UpperCaseFilter <strong>implements TextFilter { |
| |
| public String process(String s) { |
| return s.toUpperCase(); |
| }</strong> |
| }</pre> |
| |
| <p class="tips">Notice how the annotation is used to specify the Service Provider. |
| For more about the <tt>@ServiceProvider</tt> annotation and the behavior of |
| the ServiceLoader mechanism in JDK 6, see the Utilities API documentation.</p> |
| |
| |
| |
| <h3><a name="05d"></a>Modifying the MavenWordEngine Module</h3> |
| <p>In this exercise you will modify the event handler in the Text window component to use a lookup to call the |
| TextFilter interface and access the method in MyFilter. |
| Before adding the code to the event handler you need to declare a dependency on the TextFilter module.</p> |
| |
| <ol> |
| <li>Right-click the Libraries node of the <strong>MavenWordEngine</strong> module and add a dependency on the TextFilter module.</li> |
| <li>Expand the Source Packages of the <strong>MavenWordEngine</strong> module and open <tt>TextTopComponent</tt> in the source editor.</li> |
| <li>Modify the <tt>jButton1ActionPerformed</tt> button handler method to add the following code. Save your changes. |
| |
| <pre>private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { |
| String s = text.getText(); |
| <strong>TextFilter filter = Lookup.getDefault().lookup(TextFilter.class); |
| if (filter != null) { |
| s = filter.process(s); |
| }</strong> |
| text.setText(s); |
| }</pre> |
| </li> |
| </ol> |
| <p class="tips">You can use code completion to help you with the code.</p> |
| |
| <p>At this point you can check your application to see if it works correctly. |
| Next you will add a new window component that will display a history of the text that you |
| processed using the filter.</p> |
| |
| </div> |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++++++ Adding a LookupListener ++++++++++++++++++++++++ --> |
| |
| <h2><a name="06"></a>Adding LookupListener and InstanceContent to the Text window component</h2> |
| <p>In this exercise you add a listener and a field to store the contents of the text area when |
| the "Filter!" button is clicked.</p> |
| |
| <ol> |
| <li>In the <strong>MavenWordEngine</strong> module, add the <tt>InstanceContent</tt> object and |
| modify the constructor of <tt>TextTopComponent</tt> by adding the following code. |
| |
| <pre>public final class TextTopComponent extends TopComponent { |
| <strong>private InstanceContent content;</strong> |
| |
| public TextTopComponent() { |
| initComponents(); |
| setName(NbBundle.getMessage(TextTopComponent.class, "CTL_TextTopComponent")); |
| setToolTipText(NbBundle.getMessage(TextTopComponent.class, "HINT_TextTopComponent")); |
| // setIcon(Utilities.loadImage(ICON_PATH, true)); |
| |
| <strong>content = new InstanceContent(); |
| associateLookup(new AbstractLookup(content));</strong> |
| }</pre> |
| </li> |
| <li>Modify the <tt>jButton1ActionPerformed</tt> method to add the old |
| value of the text to the <tt>InstanceContent</tt> object when the button is clicked. |
| |
| <pre>private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { |
| String s = text.getText(); |
| TextFilter filter = Lookup.getDefault().lookup(TextFilter.class); |
| if (filter != null) { |
| <strong>content.add(s);</strong> |
| s = filter.process(s); |
| } |
| text.setText(s); |
| }</pre> |
| </li> |
| </ol> |
| |
| |
| <!-- =================================================================== --> |
| <!-- ++++++++++++++ Creating the History Module ++++++++++++++++++++++++ --> |
| |
| <h2><a name="07"></a>Creating the History Module</h2> |
| <p>In this section you will create a module named <strong>History</strong> that will display the |
| value of the <tt>InstanceContent</tt>. |
| To create the module, you will perform the same steps that you performed when |
| you created the TextFilter and MyFilter modules.</p> |
| |
| <div class="indent"> |
| <ol> |
| <li>Choose File > New Project (Ctrl-Shift-N).</li> |
| <li>Select Maven NetBeans Module from the Maven category. Click Next.</li> |
| <li>Type <strong>History</strong> for the Project Name.</li> |
| <li>Click Browse to set the Project Location and locate the MavenPlatformWordApp directory. Click Finish.</li> |
| <li>Add the History module as a dependency of the <b>MavenPlatformWordApp - NetBeans Platform based application</b> project.</li> |
| </ol> |
| |
| <h3><a name="07a"></a>Creating a Window Component in the History Module</h3> |
| <p>In this exercise you will use a wizard to add a window component to the module.</p> |
| |
| <ol> |
| <li>Right-click <b>History NetBeans Module</b> in the Projects window and choose New > Other to open the New File dialog.</li> |
| <li>Select Window in the Module Development category. Click Next.</li> |
| <li>Select <b>editor</b> in the Window Position dropdown list. Click Next.</li> |
| <li>Type <b>History</b> in the Class Name Prefix field. Click Finish.<br /> |
| The wizard displays a list of the files that will be created and the files that will be modified.</li> |
| </ol> |
| |
| <h3><a name="07b"></a>Modifying the History Window Component</h3> |
| |
| <p>You will now add a text area element to the window component that will display the filtered strings.</p> |
| |
| <ol> |
| <li>Click the Design tab of <tt>HistoryTopComponent.java</tt> in the editor.</li> |
| <li>Drag and drop a text area from the Palette onto the window.</li> |
| <li>Right-click the text area and choose Change Variable Name, and then type <b>historyText</b> as the name.</li> |
| <li>Add the <tt>private</tt> field <tt>result</tt> and the following code to the constructor of the <tt>HistoryTopComponent</tt> |
| so that it listens to the lookup of the String class of the current active window |
| and displays all retrieved String objects in the text area. |
| <pre class="examplecode"> |
| <strong>private Lookup.Result result;</strong> |
| |
| public HistoryTopComponent() { |
| initComponents(); |
| ... |
| |
| <strong>result = org.openide.util.Utilities.actionsGlobalContext().lookupResult(String.class); |
| result.addLookupListener(new LookupListener() { |
| public void resultChanged(LookupEvent e) { |
| historyText.setText(result.allInstances().toString()); |
| } |
| });</strong> |
| }</pre> |
| </li> |
| </ol> |
| </div> |
| |
| <h2><a name="02c"></a>Building and Running the Application</h2> |
| <p>You can now test the application.</p> |
| <ol> |
| <li>Right-click the project node of the <strong>MavenPlatformWordApp NetBeans Platform based application</strong> and choose Clean.</li> |
| <li>Right-click the project node of the <strong>MavenPlatformWordApp NetBeans Platform based application</strong> and choose Build with Dependencies.</li> |
| <li>Right-click the project node of the <strong>MavenPlatformWordApp NetBeans Platform based application</strong> and choose Run.</li> |
| </ol> |
| |
| <p>When you click Run, the IDE launches the NetBeans Platform application. |
| You can open the History and Text windows from the Window menu.<br/> |
| |
| <img src="../images/tutorials/maven-quickstart/maven-final-app.png" alt="Screenshot of final NetBeans Platform application" title="Screenshot of final NetBeans Platform application" class="margin-around b-all" /> |
| </p> |
| <p>When you type text in the Text window and click the Filter! button, the text is converted to upper case letters |
| and the text is added to the content of the History window.</p> |
| |
| <p>This quickstart 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&subject=Feedback:%20NetBeans%20Platform%20Quick%20Start%20Using%20Maven"> |
| Send Us Your Feedback</a></div> |
| |
| <p> </p> |
| <!-- ======================================================================================== --> |
| |
| <h2><a name="nextsteps"></a>See Also</h2> |
| |
| <p>For more information about creating and developing applications, see the following resources.</p> |
| <ul> |
| <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> |