blob: 8f20960842c0d42331a273d52e319ef52448ab91 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Creating a NetBeans Module 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 use Maven to create and run a NetBeans Platform Module Suite."/>
<!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
<!-- Use is subject to license terms.-->
</head>
<body>
<h1>Creating a NetBeans Module Using Maven</h1>
<p>This document demonstrates how to create a NetBeans Module project from a Maven archetype
and build and install the module in your installation of the IDE.
In this tutorial you will create a simple module project that when installed enables you to create a new file type
in your projects. The module also creates a menu action that is available when you the new file type is selected.
</p>
<p>This document is based on the Ant-based <a href="https://platform.netbeans.org/tutorials/nbm-filetype.html">NetBeans File Type Tutorial</a>
and illustrates some of the differences between using Ant and Maven to develop NetBeans modules.
After you understand some of the differences, 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 new to the NetBeans Platform, you might want to watch the
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">Using Maven with the IDE</a>
<ul>
<li><a href="#config1">Configuring Maven Options</a></li>
<li><a href="#config2">Viewing the Maven Repositories</a></li>
</ul></li>
<li><a href="#01">Creating the NetBeans Platform Module Project</a>
<ul>
<li><a href="#01a">Creating the Module</a></li>
<li><a href="#01b">Creating the DataObject Class</a></li>
</ul>
</li>
<li><a href="#02">Building and Running the Module Project</a>
<ul>
<li><a href="#02a">Specifying the Location of the NetBeans Installation</a></li>
<li><a href="#02b">Running the Module</a></li>
</ul>
</li>
<li><a href="#03">Adding an Action for the File Type</a>
<ul>
<li><a href="#03a">Creating the Action Class</a></li>
<li><a href="#03b">Assigning a Behavior to the Action</a></li>
</ul>
</li>
<li><a href="#04">Creating a Window for the File Type</a></li>
<li><a href="#05">Creating a Multiview Window</a></li>
</ul>
<p><b>To follow this tutorial, you need the software and resources listed in the following table.</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Software or Resource</th>
<th class="tblheader" scope="col">Version Required</th>
</tr>
<tr>
<td class="tbltd1"><a href="http://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>Using Maven with the IDE</h2>
<p>If this is your first Maven project you will want to familiarize yourself with the Maven configuration settings
and the Maven Repository Browser.</p>
<div class="indent">
<a name="config1"></a>
<h3>Configuring Maven Options</h3>
<p>You can use the Maven tab in the Options window to configure the behavior of Maven in the IDE and to check
that your configuration is correct.</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>
<h3><a name="config2"></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 &gt; Other &gt; 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>
</div>
<!-- =================================================================== -->
<!-- ++++++++++++++++++++++ Creating the Module ++++++++++++++++++++++++ -->
<h2><a name="01"></a>Creating the NetBeans Platform Module Project</h2>
<p>In this section you create a NetBeans Module project and then create a DataObject for the new file type.</p>
<div class="indent">
<h3><a name="01a"></a>Creating the Module</h3>
<p>In this exercise you use the New Project wizard to create the NetBeans Module project from a Maven archetype.</p>
<ol>
<li>Open the New Project wizard and choose Maven NetBeans Module in the Maven category. Click Next.</li>
<li>Type <strong>AbcFileType</strong> in Project Name. Click Finish.</li>
</ol>
<p>When you click Finish, the IDE creates the AbcFileType project.
If you look at the POM you can see that Maven will use the
<tt><a href="http://maven.apache.org/plugins/maven-jar-plugin/">maven-jar-plugin</a></tt> to build the JAR and the
<tt><a href="http://mojo.codehaus.org/nbm-maven-plugin/">nbm-maven-plugin</a></tt> will package the JAR as a
NetBeans Module (<tt>nbm</tt>).</p>
<pre class="examplecode"> &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
&lt;groupId&gt;com.mycompany&lt;/groupId&gt;
&lt;artifactId&gt;AbcFileType&lt;/artifactId&gt;
<strong>&lt;packaging&gt;nbm&lt;/packaging&gt;</strong>
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;name&gt;AbcFileType NetBeans Module&lt;/name&gt;
...
&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
<strong>&lt;artifactId&gt;nbm-maven-plugin&lt;/artifactId&gt;</strong>
&lt;extensions&gt;true&lt;/extensions&gt;
&lt;/plugin&gt;
...
&lt;plugin&gt;
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
<strong>&lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;</strong>
&lt;version&gt;2.2&lt;/version&gt;
&lt;configuration&gt;
&lt;!-- to have the jar plugin pickup the nbm generated manifest --&gt;
&lt;useDefaultManifestFile&gt;true&lt;/useDefaultManifestFile&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;</pre>
<h3><a name="01b"></a>Creating the DataObject Class</h3>
<p>In this section you will use the New File Type wizard to create the files for
creating and recognizing a new file type named <tt>.abc</tt>.
The wizard will create a
<tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/DataObject.html">DataObject</a></tt>,
a MIME type resolver and a file template for <tt>abc</tt> files
and modify <tt>layer.xml</tt> to add registration entries for the new file type.</p>
<ol>
<li>Right-click the project node in the Projects window and choose New &gt; File Type.</li>
<li>In the File Recognition panel, type <strong>text/x-abc</strong> for the MIME Type and <strong>.abc .ABC</strong> for the Filename Extension. Click Next.<br/>
<img src="../images/tutorials/maven-single/maven-single-new-filetype-wizard.png" alt="Screenshot of New File Type wizard" title="New File Type wizard" class="margin-around b-all" />
</li>
<li>Type <strong>Abc</strong> as the Class Name Prefix.</li>
<li>Click Browse and select a 16x16 pixel image file as the new file type's icon. Click Finish.
<p class="tips">You can save this image <tt><a href="../images/tutorials/maven-crud/abc16.png">abc16.png</a></tt> (&nbsp;<img src="../images/tutorials/maven-crud/abc16.png" alt="16x16 icon image" title="16x16" />&nbsp;)
to you system and specify the image in the wizard.</p>
</li>
</ol>
<p>When you click Finish, the IDE creates the <tt>AbcDataObject</tt> class and
copies your file type icon into the package in the <tt>src/main/resources</tt> under Other Sources.<br/>
<img src="../images/tutorials/maven-single/maven-single-projects1.png" alt="Screenshot of Projects window" title="Screenshot of Projects window" class="margin-around b-all" />
</p>
<p>In the Projects window you can see that the wizard created the MIME type resolver (<tt>AbcResolver.xml</tt>)
and template (<tt>AbcTemplate.abc</tt>) files in the <tt>src/main/resources</tt> directory.</p>
<p class="tips">For more details on the files that the IDE created, see
<a href="http://wiki.netbeans.org/DevFaqDataObject">What is a DataObject</a> and the section on
<a href="nbm-filetype.html#recognizing">Recognizing Abc Files</a> in the <a href="nbm-filetype.html">NBM Filetype tutorial</a>.</p>
</div>
<!-- =================================================================== -->
<!-- ++++++++++++++++++++++ Running the Module ++++++++++++++++++++++++ -->
<h2><a name="02"></a>Building and Running the Project</h2>
<p>In this section you will configure the module so that the module will be installed into the
current version of the IDE. A new instance of the IDE will launch when you run the module. </p>
<div class="indent">
<h3><a name="02a"></a>Specifying the Location of the NetBeans Installation</h3>
<p>By default, no target NetBeans installation is specified when you use the Maven archetype to create a NetBeans Platform module.
You can build the project, but when you try to run the project before you set the installation directory
you will see a build error similar to the following in the Output window.<br/>
<img src="../images/tutorials/maven-single/output-build-error.png" alt="Screenshot of Output window showing build error" title="Output window showing build error" class="margin-around b-all" />
</p>
<p>To install and run the module in an installation of the IDE you need to edit the <tt>nbm-maven-plugin</tt>
element in the POM to specify the path to the installation directory.</p>
<ol>
<li>Expand the Project Files node and open <tt>pom.xml</tt> in the editor.</li>
<li>Specify the path to the NetBeans installation by modifying the <tt>nbm-maven-plugin</tt>
element to add the <tt>&lt;netbeansInstallation&gt;</tt> element.
<pre class="examplecode">&lt;plugin&gt;
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
&lt;artifactId&gt;nbm-maven-plugin&lt;/artifactId&gt;
&lt;version&gt;3.2&lt;/version&gt;
&lt;extensions&gt;true&lt;/extensions&gt;
<strong>&lt;configuration&gt;
&lt;netbeansInstallation&gt;/home/me/netbeans-6.9&lt;/netbeansInstallation&gt;
&lt;/configuration&gt;</strong>
&lt;/plugin&gt;</pre>
<!-- &lt;descriptor&gt;src/main/nbm/module.xml&lt;/descriptor&gt; -->
<p class="notes"><strong>Note.</strong> The path needs to specify the directory that contains the <tt>bin</tt> directory containing the runnable file.</p>
<p>For example, on OS X the path might resemble the following.</p>
<pre class="examplecode">&lt;netbeansInstallation&gt;/Applications/NetBeans/NetBeans 6.9.app/Contents/Resources/NetBeans&lt;/netbeansInstallation&gt;</pre>
</li>
</ol>
<h3><a name="02b"></a>Running the Module</h3>
<p>After you specify the NetBeans IDE installation directory you can build and run the module.</p>
<ol>
<li>Right-click the project node and choose Build.</li>
<li>Right-click the project node and choose Run.</li>
</ol>
<p>When you choose Run, the IDE launches with the new module installed.
To confirm that the new module is working correctly, create a new project and then use the New File wizard
to create an <tt>abc</tt> file.
For example, you can create a simple Java application and then open the New File wizard and
choose the Empty Abc file type in the Other category.</p>
<p class="tips">When you create the new file, specify a source package if you want to see the file in the Projects window.
By default the wizard for the new file type will create the file at the root level of the project.</p>
<p><img src="../images/tutorials/maven-single/wizard-new-abc-file.png" alt="Screenshot of New File wizard with Abc file type" title="New File wizard with Abc file type" class="margin-around b-all" />
<br/>
After you create the new abc file you can see that the file is displayed in the Projects window with the icon for the file type.
If you open the file in the editor you can see that the contents of the new file were generated from the file template.<br/>
<img src="../images/tutorials/maven-single/maven-single-projects-abcfile.png" alt="Screenshot of Abc file in Projects window and open in editor" title="Abc file in Projects window and open in editor" class="margin-around b-all" />
</p>
</div>
<!-- =================================================================== -->
<!-- +++++++++++++++++++++++ Adding an Action ++++++++++++++++++++++++++ -->
<h2><a name="03"></a>Adding an Action for the File Type</h2>
<p>In this section you will add an action that can be invoked from
the popup menu when the user right-clicks the node of the new file type.</p>
<div class="indent">
<h3><a name="03a"></a>Creating the Action Class</h3>
<p>In this exercise you will use the New Action wizard to create a Java class that will perform an action for the new file type.
The wizard will also register the class in the <tt>layer.xml</tt>.</p>
<ol>
<li>Right-click the project node and choose New &gt; Action.</li>
<li>In the Action Type panel, select Conditionally Enabled and type <strong>com.mycompany.abcfiletype.AbcDataObject</strong> for the Cookie Class. Click Next.<br/>
<img src="../images/tutorials/maven-single/maven-single-newactionwizard.png" alt="Screenshot of New Action wizard" title="New Action wizard" class="margin-around b-all" />
</li>
<li>Select Edit in the Category drop-down list and deselect Global Menu Item.</li>
<li>Select File Type Context Menu Item and select <strong>text/x-abc</strong> in the Content Type drop-down list. Click Next.</li>
<li>Type <strong>MyAction</strong> as the Class Name and <strong>My Action</strong> as the Display Name. Click Finish.</li>
</ol>
<p>When you click Finish, <tt>MyAction.java</tt> is created in the <tt>com.mycompany.abcfiletype</tt> source package.
If you open <tt>layer.xml</tt> in the editor you can see that the wizard added details about the new action
for the file type inside the <tt>Edit</tt> folder element inside the <tt>Actions</tt> folder.</p>
<pre class="examplecode">
&lt;folder name="Actions"&gt;
&lt;folder name="Edit"&gt;
<strong>&lt;file name="com-mycompany-abcfiletype-MyAction.instance"&gt;</strong>
&lt;attr name="delegate" methodvalue="org.openide.awt.Actions.inject"/&gt;
&lt;attr name="displayName" bundlevalue="com.mycompany.abcfiletype.Bundle#CTL_MyAction"/&gt;
&lt;attr name="injectable" stringvalue="com.mycompany.abcfiletype.MyAction"/&gt;
&lt;attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/&gt;
&lt;attr name="noIconInMenu" boolvalue="false"/&gt;
&lt;attr name="selectionType" stringvalue="EXACTLY_ONE"/&gt;
&lt;attr name="type" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;</pre>
<p>The wizard also generated elements inside the <tt>Loaders</tt> and <tt>Factories</tt> folder elements
that apply to the new file type. The menu actions for the <tt>abc</tt> file type are
specified under <tt>Actions</tt> and the <tt>DataLoader</tt> is specified under <tt>Factories</tt>.</p>
<pre class="examplecode">
&lt;folder name="Loaders"&gt;
&lt;folder name="text"&gt;
<strong>&lt;folder name="x-abc"&gt;
&lt;folder name="Actions"&gt;
&lt;file name="com-mycompany-abcfiletype-MyAction.shadow"&gt;</strong>
&lt;attr name="originalFile" stringvalue="Actions/Edit/com-mycompany-abcfiletype-MyAction.instance"/&gt;
<strong>&lt;attr name="position" intvalue="0"/&gt;</strong>
&lt;/file&gt;
&lt;file name="org-openide-actions-CopyAction.shadow"&gt;
&lt;attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-CopyAction.instance"/&gt;
&lt;attr name="position" intvalue="400"/&gt;
&lt;/file&gt;
...
&lt;/folder&gt;
<strong>&lt;folder name="Factories"&gt;
&lt;file name="AbcDataLoader.instance"&gt;</strong>
&lt;attr name="SystemFileSystem.icon" urlvalue="nbresloc:/com/mycompany/abcfiletype/abc16.png"/&gt;
&lt;attr name="dataObjectClass" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/&gt;
&lt;attr name="instanceCreate" methodvalue="org.openide.loaders.DataLoaderPool.factory"/&gt;
&lt;attr name="mimeType" stringvalue="text/x-abc"/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/folder&gt;</pre>
<p class="tips">The position of My Action in the popup menu is specified by the <tt>position</tt> attribute (<tt>&lt;attr name="position" intvalue="0"/&gt;</tt>).
The default is to assign the <tt>intvalue</tt> of the attribute of a new action to <tt>0</tt> which will make the
action the topmost in the list.
You can change the order by changing the <tt>intvalue</tt>.
For example, if you change the <tt>intvalue</tt> to <tt>200</tt>, the My Action menu item will appear below
the Open menu item (the Open action has an <tt>intvalue</tt> of <tt>100</tt>).</p>
<h3><a name="03b"></a>Assigning a Behavior to the Action</h3>
<p>You now need to add the code for the action.
In this example you will add some code that uses <tt>DialogDisplayer</tt> to open a dialog box
when the action is invoked from the popup menu.
To use <tt>DialogDisplayer</tt> you will also need to declare a direct dependency on <tt>org.openide.dialogs</tt>.</p>
<ol>
<li>Modify the <tt>actionPerformed(ActionEvent ev)</tt> method in <tt>MyAction.java</tt> to open a dialog when My Action is invoked.
<pre class="examplecode">@Override
public void actionPerformed(ActionEvent ev) {
<strong>FileObject f = context.getPrimaryFile();
String displayName = FileUtil.getFileDisplayName(f);
String msg = "This file is " + displayName + ".";
NotifyDescriptor nd = new NotifyDescriptor.Message(msg);
DialogDisplayer.getDefault().notify(nd);</strong>
}</pre>
</li>
<li>Fix your imports and confirm that you import <tt><strong>org.openide.filesystems.FileObject</strong></tt>. Save your changes.
<p>When you fixed the imports you added an import statement for <tt>org.openide.DialogDisplayer</tt>.
You now need to declare the dependency on the <tt>org.openide.dialogs</tt> artifact a direct dependency instead of a transitive dependency.</p></li>
<li>Right-click the <tt>org.openide.dialogs</tt> JAR under the project's Libraries node and choose Declare as Direct Dependency.</li>
</ol>
<p>You can now test the module to confirm that the new action works correctly.</p>
<p class="notes"><strong>Note.</strong> To run the module you will first need to clean and build the module.</p>
<p><img src="../images/tutorials/maven-single/maven-single-action-popup.png" alt="Screenshot of Abc file in Projects window and open in editor" title="Abc file in Projects window and open in editor" class="margin-around b-all" />
</p>
<p>When you right-click on a node of the <tt>abc</tt> file type you will see that My Action is one of the items in the popup menu.</p>
</div>
<!-- =================================================================== -->
<!-- +++++++++++++++++++++++ Creating a Window +++++++++++++++++++++++++ -->
<h2><a name="04"></a>Creating a Window for the File Type</h2>
<p>By default, the new file type will open into a basic text editor.
If you do not want to use an editor for the new file type, you can create a new window
specifically for editing the new file type.
You can then modify the window component to support other ways of editing the file, for example by making the window a visual editor.
In this section you will create the new window component specifically for files of your new file type.</p>
<ol>
<li>Right-click the project node and choose New &gt; Window.</li>
<li>Select <strong>editor</strong> from the dropdown list and select Open on Application Start. Click Next.</li>
<li>Type <strong>Abc</strong> as the Class Name Prefix. Click Finish.</li>
<li>Open <tt>AbcDataObject.java</tt> in the editor and modify the class constructor to use
<tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html">OpenSupport</a></tt>
instead of <tt>DataEditorSupport</tt>.
<pre class="examplecode">
public AbcDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
super(pf, loader);
CookieSet cookies = getCookieSet();
<strong>cookies.add((Node.Cookie) new AbcOpenSupport(getPrimaryEntry()));</strong>
}</pre>
</li>
<li>Create the <tt>AbcOpenSupport</tt> class that is called by the constructor.
<p class="tips">Type Alt-Enter in the line containing the call to <tt>AbcOpenSupport</tt> to
create <tt>AbcOpenSupport</tt> in the package <tt>com.mycompany.abcfiletype</tt>.</p></li>
<li>Modify <tt>AbcOpenSupport</tt> to extend <tt>OpenSupport</tt> and implement <tt>OpenCookie</tt> and <tt>CloseCookie</tt>.
<pre class="examplecode">
class AbcOpenSupport <strong>extends OpenSupport implements OpenCookie, CloseCookie</strong> {</pre>
</li>
<li>Implement the abstract methods (Alt-Enter) and make the following changes to the class.
<pre class="examplecode">
public AbcOpenSupport(<strong>AbcDataObject.Entry entry</strong>) {
<strong>super(entry);</strong>
}
@Override
protected CloneableTopComponent createCloneableTopComponent() {
<strong>AbcDataObject dobj = (AbcDataObject) entry.getDataObject();
AbcTopComponent tc = new AbcTopComponent();
tc.setDisplayName(dobj.getName());
return tc;</strong>
}</pre>
</li>
<li>Open <tt>AbcTopComponent</tt> in the editor and modify the class to extend <tt>CloneableTopComponent</tt>
instead of <tt>TopComponent</tt>.
<pre class="examplecode">public final class AbcTopComponent extends <strong>CloneableTopComponent</strong> {</pre>
</li>
<li>Change the class modifier from <tt>private</tt> to <tt>public</tt>.
<pre class="examplecode"><strong>public</strong> static AbcTopComponent instance;</pre>
</li>
<li>Fix your imports and save your changes.</li>
</ol>
<p>You can now try running the module again after cleaning and building the project.<br/>
<img src="../images/tutorials/maven-single/maven-single-newfile-window.png" alt="Screenshot of Abc file in Projects window and open in editor" title="Abc file in Projects window and open in editor" class="margin-around b-all" /></p>
<p>When you open an abc file the file will now open in the new window instead of the basic editor.</p>
<!--<p>The project also contains other XML files containing metadata about the project such as <tt>profiles.xml</tt>.
The <tt>profiles.xml</tt> file specifies the path to the NetBeans installation and is used by the IDE when running the project.
-->
<!--<p>Unlike the original Ant-based tutorial, you do not specify the platform installation in the wizard.
For Maven module suites you need to modify the <tt>&lt;netbeans.installation&gt;</tt> element in the profiles.xml file
and explicitly specify the path to the NetBeans platform installation. </p>
see https://netbeans.org/bugzilla/show_bug.cgi?id=185941.
-->
<p>This tutorial demonstrated how to create and run a NetBeans Module that you create from a Maven Archetype.
You learned how to modify the project POM to specify the target NetBeans installation so that
the Run command in the IDE will install the module and launch a new instance of the IDE.
You also learned a little about how to work with file types and <tt>DataObjects</tt>, but for more details you should look at
the <a href="https://platform.netbeans.org/tutorials/nbm-filetype.html">NetBeans File Type Tutorial</a>.
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:%20Creating%20a%20NetBeans%20Module%20Using%20Maven">
Send Us Your Feedback</a></div>
<p>&nbsp;</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>