<!DOCTYPE html>

<html class="no-js" lang="en" dir="ltr">
<head>
  <meta charset="utf-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Apache NetBeans Maven Utilities - NBM Maven Plugin &#x2013; nbm:nbm</title>
  <link rel="stylesheet" href="./css/netbeans.css" />
  <link href="https://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet">   
</head>
<body>
<div class="top-bar" id="responsive-menu">
    <div class='top-bar-left'>
        <a class='title' href="http://netbeans.apache.org"><img src='/images/apache-netbeans.svg' style='padding: 8px; height: 48px;'>Apache NetBeans (incubating)</a>
    </div>
    <div class="top-bar-right">
        <ul class="vertical medium-horizontal menu" style="right: 90px;" data-responsive-menu="drilldown medium-dropdown">
            <li> <a href="../nb-repository/index.html">NB Repository Plugin</a> </li>
            <li> <strong style='line-height: 1;margin-bottom: 0;padding: 0.7rem 1rem;display: block;' >NBM Plugin</strong> </li>
            <li> <a href="../shared/index.html">Shared</a> </li>
            <li> <a href="../parent/index.html">Parent</a> </li>
        </ul>
    </div>
</div>
<div class='grid-container main-content'>
            <div id="toc" class="toc">
<div id="toctitle">Overview</div>
<ul class="sectlevel1">
<li><a href="index.html">Usage</a></li>
<li><a href="plugin-info.html">Plugin Goals</a></li>
</ul>
<div id="toctitle">HOWTOs</div>
<ul class="sectlevel1">
<li><a href="buildinstexample.html">Customize installers</a></li>
<li><a href="upgrade.html">Upgrade from older versions</a></li>
</ul>
<div id="toctitle">Deprecated</div>
<ul class="sectlevel1">
<li><a href="nbm.html">Descriptor Format</a></li>
<li><a href="descriptor.html">Example Descriptor</a></li>
</ul>
</div>
<div id="preamble">
<div class="sectionbody">

  
    <div class="section">
<h2><a name="nbm:nbm"></a>nbm:nbm</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.netbeans.maven:nbm-maven-plugin:4.2-SNAPSHOT:nbm</p>
      
<p><b>Description</b>:</p>
      
<div>Create the NetBeans module artifact (nbm file), part of &quot;nbm&quot;
lifecycle/packaging.</div>
      
<p><b>Attributes</b>:</p>
      
<ul>
        
<li>Requires a Maven project to be executed.</li>
        
<li>Requires dependency resolution of artifacts in scope: <tt>runtime</tt>.</li>
        
<li>Binds by default to the <a class="externalLink" href="http://maven.apache.org/ref/current/maven-core/lifecycles.html">lifecycle phase</a>: <tt>package</tt>.</li>
      </ul>
      
<div class="section">
<h3><a name="Required_Parameters"></a>Required Parameters</h3>
        
<table class="bodyTable" border="0">
          
<tr class="a">
            
<th>Name</th>
            
<th>Type</th>
            
<th>Since</th>
            
<th>Description</th>
          </tr>
          
<tr class="b">
            
<td><b><a href="#cluster">cluster</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>NetBeans module's cluster. Replaces the cluster element in module
descriptor.<br /><b>Default value is</b>: <tt>extra</tt>.<br /></td>
          </tr>
        </table>
      </div>
      
<div class="section">
<h3><a name="Optional_Parameters"></a>Optional Parameters</h3>
        
<table class="bodyTable" border="0">
          
<tr class="a">
            
<th>Name</th>
            
<th>Type</th>
            
<th>Since</th>
            
<th>Description</th>
          </tr>
          
<tr class="b">
            
<td><b><a href="#author">author</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Author of the module. Shown in the Module manager UI.<br /><b>Default value is</b>: <tt>${project.organization.name}</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#codeNameBase">codeNameBase</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>codename base of the module, uniquely identifying the module within
the NetBeans runtime. usually the package name equivalent. Can
include the major release version. See <a class="externalLink" href="http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-manifest">NetBeans
Module system docs</a><br /><b>Default value is</b>: <tt>${project.groupId}.${project.artifactId}</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#descriptor">descriptor</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td><b>Deprecated.</b> all content from the module descriptor can be defined as plugin
configuration now, will be removed in 4.0 entirely<br /><b>Default value is</b>: <tt>${basedir}/src/main/nbm/module.xml</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#distributionUrl">distributionUrl</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Distribution base URL for the NBM at runtime deployment time. Note:
Usefulness of the parameter is questionable, it doesn't allow for
mirrors and usually when downloading the nbm, one already knows the
location anyway. Please note that the netbeans.org Ant scripts put
a dummy url here. The actual correct value used when constructing
update site is explicitly set there. The general assumption there
is that all modules from one update center come from one base URL.
Also see <tt>distBase</tt> parameter in auto-update mojo. The
value is either a direct http protocol based URL that points to the
location under which nbm file will be located, or it allows to
create an update site based on maven repository content. The later
created autoupdate site document can use this information and
compose the application from one or multiple maven repositories.
<br />
Format: id::layout::url same as in maven-deploy-plugin <br />
with the 'default' and 'legacy' layouts. (maven2 vs maven1 layout)
<br />
If the value doesn't contain :: characters, it's assumed to be the
flat structure and the value is just the URL.<br /><b>User property is</b>: <tt>maven.nbm.distributionURL</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#encoding">encoding</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>The character encoding scheme to be applied when filtering nbm
resources.<br /><b>Default value is</b>: <tt>${project.build.sourceEncoding}</tt>.<br /><b>User property is</b>: <tt>encoding</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#externals">externals</a></b></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></td>
            
<td>list of groupId:artifactId pairs describing libraries that go into
the nbm file and will only include the .external reference in the
nbm instead of the actual binary. See <a class="externalLink" href="http://netbeans.org/bugzilla/show_bug.cgi?id=195041">NetBeans
issue #195041</a> for details. Please note that the scheme will
only work for artifacts present in central repository but no effort
is made at build time to enforce that. Additionally at runtime when
installing the module, the user has to be online and be capable of
reaching central using maven. You have been warned.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#finalName">finalName</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Name of the jar packaged by the jar:jar plugin<br /><b>User property is</b>: <tt>project.build.finalName</tt>.<br /><b>Alias is</b>: <tt>jarname</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#homePageUrl">homePageUrl</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Get homepage URL of the module. Is accessible from NetBeans UI upon
installation, should point to place with additional information
about the functionality.<br /><b>Default value is</b>: <tt>${project.url}</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#keystore">keystore</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>keystore location for signing the nbm file<br /><b>User property is</b>: <tt>keystore</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#keystorealias">keystorealias</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>keystore alias<br /><b>User property is</b>: <tt>keystorealias</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#keystorepassword">keystorepassword</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>keystore password<br /><b>User property is</b>: <tt>keystorepass</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#licenseFile">licenseFile</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>path to the license agreement file that will be shown when
installing the module. When defined, <tt>licenseName</tt> needs
to be defined as well.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#licenseName">licenseName</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>name of the license applicable to the NBM. The value should be
equal across modules with the same license. If the user already
agreed to the same license before, he/she won't be asked again to
agree and for multiple one installed at the same time, just one
license agreement is shown. When defined, <tt>licenseFile</tt>
needs to be defined as well.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#moduleType">moduleType</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Deployment type of the module, allowed values are
<tt>normal</tt>,<tt>eager</tt>,<tt>autoload</tt>,
<tt>disabled</tt>. 

<p><tt>autoload</tt> - Such a module is automatically enabled
when some other module requires it and automatically disabled
otherwise.</p>

<p><tt>eager</tt> - This module type gets automatically enabled
when all it's dependencies are satisfied. Disabled otherwise.</p>

<p><tt>normal</tt> - This is the default value. This kind of
module is enabled/disabled manually by the user. It installs
enabled.</p>

<p><tt>disabled</tt> - This kind of module is enabled/disabled
manually by the user. It installs disabled. Since 3.11</p>
For details, see <a class="externalLink" href="http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#enablement">Netbeans
Module system docs</a> Since 3.14, for autoload and eager modules,
we automatically set AutoUpdate-Show-In-Client manifest entry to
false, if not defined already otherwise in the manifest. See issue
<a class="externalLink" href="http://jira.codehaus.org/browse/MNBMODULE-194">MNBMODULE-194</a><br /><b>Default value is</b>: <tt>normal</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#nbmBuildDir">nbmBuildDir</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>NetBeans module assembly build directory. directory where the the
NetBeans jar and nbm file get constructed.<br /><b>Default value is</b>: <tt>${project.build.directory}/nbm</tt>.<br /><b>User property is</b>: <tt>maven.nbm.buildDir</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#nbmJavahelpSource">nbmJavahelpSource</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td><b>Deprecated.</b> Obsolete as of NetBeans 7.0 with @HelpSetRegistration.<br /><b>Default value is</b>: <tt>${basedir}/src/main/javahelp</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#nbmResources">nbmResources</a></b></td>
            
<td><tt>Resource[]</tt></td>
            
<td><tt>-</tt></td>
            
<td>A list of additional resources to include in the NBM file. (Not in
the module JAR; see <tt>InstalledFileLocator</tt> for
retrieval.) Supersedes similarly-named configuration in the module
descriptor file. 

<p>For example, to include native libraries:</p>

<div>
<pre>
&lt;nbmResource&gt;
  &lt;directory&gt;src/main/libs&lt;/directory&gt;
  &lt;targetPath&gt;modules/lib&lt;/targetPath&gt;
  &lt;includes&gt;
    &lt;include&gt;*.dll&lt;/include&gt;
    &lt;include&gt;*.so&lt;/include&gt;
  &lt;/includes&gt;
&lt;/nbmResource&gt;
</pre></div><br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#requiresRestart">requiresRestart</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>if true, upon installing the NBM the platform app/IDE restart is
requested. Not necessary in most cases.<br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#skipNbm">skipNbm</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Boolean parameter denoting if creation of NBM file shall be skipped
or not. If skipped, just the expanded directory for cluster is
created<br /><b>Default value is</b>: <tt>false</tt>.<br /><b>User property is</b>: <tt>maven.nbm.skip</tt>.<br /></td>
          </tr>
        </table>
      </div>
      
<div class="section">
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        
<p><b><a name="author">author</a>:</b></p>
        
<div>Author of the module. Shown in the Module manager UI.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.organization.name}</tt></li>
        </ul><hr />
<p><b><a name="cluster">cluster</a>:</b></p>
        
<div>NetBeans module's cluster. Replaces the cluster element in module
descriptor.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>Yes</tt></li>
          
<li><b>Default</b>: <tt>extra</tt></li>
        </ul><hr />
<p><b><a name="codeNameBase">codeNameBase</a>:</b></p>
        
<div>codename base of the module, uniquely identifying the module within
the NetBeans runtime. usually the package name equivalent. Can
include the major release version. See <a class="externalLink" href="http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-manifest">NetBeans
Module system docs</a></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.groupId}.${project.artifactId}</tt></li>
        </ul><hr />
<p><b><a name="descriptor">descriptor</a>:</b></p>
        
<div><b>Deprecated.</b> all content from the module descriptor can be defined as plugin
configuration now, will be removed in 4.0 entirely</div>
        
<div>a NetBeans module descriptor containing dependency information and
more..</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${basedir}/src/main/nbm/module.xml</tt></li>
        </ul><hr />
<p><b><a name="distributionUrl">distributionUrl</a>:</b></p>
        
<div>Distribution base URL for the NBM at runtime deployment time. Note:
Usefulness of the parameter is questionable, it doesn't allow for
mirrors and usually when downloading the nbm, one already knows the
location anyway. Please note that the netbeans.org Ant scripts put
a dummy url here. The actual correct value used when constructing
update site is explicitly set there. The general assumption there
is that all modules from one update center come from one base URL.
Also see <tt>distBase</tt> parameter in auto-update mojo. The
value is either a direct http protocol based URL that points to the
location under which nbm file will be located, or it allows to
create an update site based on maven repository content. The later
created autoupdate site document can use this information and
compose the application from one or multiple maven repositories.
<br />
Format: id::layout::url same as in maven-deploy-plugin <br />
with the 'default' and 'legacy' layouts. (maven2 vs maven1 layout)
<br />
If the value doesn't contain :: characters, it's assumed to be the
flat structure and the value is just the URL.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.nbm.distributionURL</tt></li>
        </ul><hr />
<p><b><a name="encoding">encoding</a>:</b></p>
        
<div>The character encoding scheme to be applied when filtering nbm
resources.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>encoding</tt></li>
          
<li><b>Default</b>: <tt>${project.build.sourceEncoding}</tt></li>
        </ul><hr />
<p><b><a name="externals">externals</a>:</b></p>
        
<div>list of groupId:artifactId pairs describing libraries that go into
the nbm file and will only include the .external reference in the
nbm instead of the actual binary. See <a class="externalLink" href="http://netbeans.org/bugzilla/show_bug.cgi?id=195041">NetBeans
issue #195041</a> for details. Please note that the scheme will
only work for artifacts present in central repository but no effort
is made at build time to enforce that. Additionally at runtime when
installing the module, the user has to be online and be capable of
reaching central using maven. You have been warned.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="finalName">finalName</a>:</b></p>
        
<div>Name of the jar packaged by the jar:jar plugin</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>project.build.finalName</tt></li>
          
<li><b>Alias</b>: <tt>jarname</tt></li>
        </ul><hr />
<p><b><a name="homePageUrl">homePageUrl</a>:</b></p>
        
<div>Get homepage URL of the module. Is accessible from NetBeans UI upon
installation, should point to place with additional information
about the functionality.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.url}</tt></li>
        </ul><hr />
<p><b><a name="keystore">keystore</a>:</b></p>
        
<div>keystore location for signing the nbm file</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>keystore</tt></li>
        </ul><hr />
<p><b><a name="keystorealias">keystorealias</a>:</b></p>
        
<div>keystore alias</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>keystorealias</tt></li>
        </ul><hr />
<p><b><a name="keystorepassword">keystorepassword</a>:</b></p>
        
<div>keystore password</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>keystorepass</tt></li>
        </ul><hr />
<p><b><a name="licenseFile">licenseFile</a>:</b></p>
        
<div>path to the license agreement file that will be shown when
installing the module. When defined, <tt>licenseName</tt> needs
to be defined as well.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="licenseName">licenseName</a>:</b></p>
        
<div>name of the license applicable to the NBM. The value should be
equal across modules with the same license. If the user already
agreed to the same license before, he/she won't be asked again to
agree and for multiple one installed at the same time, just one
license agreement is shown. When defined, <tt>licenseFile</tt>
needs to be defined as well.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="moduleType">moduleType</a>:</b></p>
        
<div>Deployment type of the module, allowed values are
<tt>normal</tt>,<tt>eager</tt>,<tt>autoload</tt>,
<tt>disabled</tt>. 

<p><tt>autoload</tt> - Such a module is automatically enabled
when some other module requires it and automatically disabled
otherwise.</p>

<p><tt>eager</tt> - This module type gets automatically enabled
when all it's dependencies are satisfied. Disabled otherwise.</p>

<p><tt>normal</tt> - This is the default value. This kind of
module is enabled/disabled manually by the user. It installs
enabled.</p>

<p><tt>disabled</tt> - This kind of module is enabled/disabled
manually by the user. It installs disabled. Since 3.11</p>
For details, see <a class="externalLink" href="http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#enablement">Netbeans
Module system docs</a> Since 3.14, for autoload and eager modules,
we automatically set AutoUpdate-Show-In-Client manifest entry to
false, if not defined already otherwise in the manifest. See issue
<a class="externalLink" href="http://jira.codehaus.org/browse/MNBMODULE-194">MNBMODULE-194</a></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>normal</tt></li>
        </ul><hr />
<p><b><a name="nbmBuildDir">nbmBuildDir</a>:</b></p>
        
<div>NetBeans module assembly build directory. directory where the the
NetBeans jar and nbm file get constructed.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.nbm.buildDir</tt></li>
          
<li><b>Default</b>: <tt>${project.build.directory}/nbm</tt></li>
        </ul><hr />
<p><b><a name="nbmJavahelpSource">nbmJavahelpSource</a>:</b></p>
        
<div><b>Deprecated.</b> Obsolete as of NetBeans 7.0 with @HelpSetRegistration.</div>
        
<div>The location of JavaHelp sources for the project. The documentation
itself is expected to be in the directory structure based on
codenamebase of the module. eg. if your codenamebase is
&quot;org.netbeans.modules.apisupport&quot;, then the actual docs files shall
go to
${basedir}/src/main/javahelp/org/netbeans/modules/apisupport/docs.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${basedir}/src/main/javahelp</tt></li>
        </ul><hr />
<p><b><a name="nbmResources">nbmResources</a>:</b></p>
        
<div>A list of additional resources to include in the NBM file. (Not in
the module JAR; see <tt>InstalledFileLocator</tt> for
retrieval.) Supersedes similarly-named configuration in the module
descriptor file. 

<p>For example, to include native libraries:</p>

<div>
<pre>
&lt;nbmResource&gt;
  &lt;directory&gt;src/main/libs&lt;/directory&gt;
  &lt;targetPath&gt;modules/lib&lt;/targetPath&gt;
  &lt;includes&gt;
    &lt;include&gt;*.dll&lt;/include&gt;
    &lt;include&gt;*.so&lt;/include&gt;
  &lt;/includes&gt;
&lt;/nbmResource&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>org.apache.maven.model.Resource[]</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="requiresRestart">requiresRestart</a>:</b></p>
        
<div>if true, upon installing the NBM the platform app/IDE restart is
requested. Not necessary in most cases.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="skipNbm">skipNbm</a>:</b></p>
        
<div>Boolean parameter denoting if creation of NBM file shall be skipped
or not. If skipped, just the expanded directory for cluster is
created</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.nbm.skip</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul>
      </div>
    </div>
  

</div>
</div>
</div>
<div class='grid-container incubator-area' style='margin-top: 64px'>
    <div class='grid-x grid-padding-x'>
        <div class='large-auto cell text-center'>
            <a href="https://www.apache.org/">
                <img style="width: 320px" title="Apache Software Foundation" src="/images/asf_logo_wide.svg" />
            </a>
        </div>
        <div class='large-auto cell text-center'>
            <a href="https://www.apache.org/events/current-event.html">
               <img style="width:234px; height: 60px;" title="Apache Software Foundation current event" src="https://www.apache.org/events/current-event-234x60.png"/>
            </a>
        </div>
    </div>
</div>
<div class='footer-disclaimer'>
    <div class="footer-disclaimer-content">
        <p>Copyright &copy; 2017-2018 <a href="https://www.apache.org">The Apache Software Foundation</a>.</p>
        <p>Licensed under the Apache <a href="https://www.apache.org/licenses/">license</a>, version 2.0</p>
        <p><a href="https://incubator.apache.org/" alt="Apache Incubator"><img src='/images/incubator_feather_egg_logo_bw_crop.png' title='Apache Incubator'></img></a></p>
        <div style='max-width: 40em; margin: 0 auto'>
            <p>Apache NetBeans is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
            <p>Apache Incubator, Apache, the Apache feather logo, the Apache NetBeans logo, and the Apache Incubator project logo are trademarks of <a href="https://www.apache.org">The Apache Software Foundation</a>.</p>
            <p>Oracle and Java are registered trademarks of Oracle and/or its affiliates.</p>
        </div>
        
    </div>
</div>
<a href="https://github.com/apache/incubator-netbeans-mavenutils"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png" alt="Fork me on GitHub"></a>



        <script src="/js/vendor/jquery-3.2.1.min.js"></script>
        <script src="/js/vendor/what-input.js"></script>
        <script src="/js/vendor/jquery.colorbox-min.js"></script>
        <script src="/js/vendor/foundation.min.js"></script>
        <script src="/js/netbeans.js"></script>
        <script>
            
            $(function(){ $(document).foundation(); });
        </script>
</body>