<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.1 at 2018-09-13 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20180913" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Sling SlingStart Maven Plugin &#x2013; slingstart:attach-slingfeature</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
      <script type="text/javascript" src="./js/apache-maven-fluido-1.6.min.js"></script>
      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><div id="bannerLeft"><h2>Apache Sling SlingStart Maven Plugin</h2>
</div>
</div>
        <div class="pull-right"></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2018-09-13<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.2</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Overview</li>
    <li><a href="index.html" title="Introduction"><span class="none"></span>Introduction</a>  </li>
    <li><a href="plugin-info.html" title="Goals"><span class="none"></span>Goals</a>  </li>
          <li class="nav-header">Project Documentation</li>
    <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a>  </li>
    <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >

  
    <div class="section">
<h2><a name="slingstart:attach-slingfeature"></a>slingstart:attach-slingfeature</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.apache.sling:slingstart-maven-plugin:1.8.2:attach-slingfeature</p>
      
<p><b>Description</b>:</p>
      
<div>Attach the model as a project artifact.</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>test</tt>.</li>
        
<li>The goal is thread-safe and supports parallel builds.</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="Optional_Parameters"></a>Optional Parameters</h3>
        
<table class="table table-striped" 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="#allowUnresolvedPomDependencies">allowUnresolvedPomDependencies</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to true, an exception is throws when &quot;usePomDependencies&quot; is
set to true and some dependency version could not be resolved in
the Maven POM.<br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#disableExtendingMavenClasspath">disableExtendingMavenClasspath</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to <tt>true</tt> the Maven classpath (either scope
&quot;provided&quot; or &quot;test&quot;) will not be extended by the artifacts being
referenced in the model. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p><br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#model">model</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>1.3</tt></td>
            
<td>Inlined model. Is processed first and afterwards merged with any
model found in <tt>modelDirectory</tt>. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p><br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#modelDirectory">modelDirectory</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>The model directory containing the provision models. This parameter
is evaluated in the <tt>DependencyLifecycleParticipant</tt>. As
default first <tt>${basedir}/src/main/provisioning</tt> and
then <tt>${basedir}/src/test/provisioning</tt> is used (in case
the former does not exist). 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p><br /><b>Default value is</b>: <tt>${basedir}/src/main/provisioning</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#modelPattern">modelPattern</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>The model file name pattern to consider. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p><br /><b>Default value is</b>: <tt>((.*)\.txt|(.*)\.model)</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#usePomDependencies">usePomDependencies</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to <tt>true</tt>, Artifact dependencies from
provisioning file without explicit version are tried to be resolved
against the versions given in the Maven POM. The following sections
in the effective pom are considered during resolving the version: 

<ol style="list-style-type: decimal">

<li>The project's artifact itself</li>

<li>The project's dependencies</li>

<li>The project's dependencyManagement</li>
</ol><br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#usePomVariables">usePomVariables</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to <tt>true</tt>, properties from the Maven POM can be
used as variables in the provisioning files. The resolved variables
are added to the generated provisioning file, so other tools using
this model do not have to resolve them themselves.<br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
        </table>
      </div>
      
<div class="section">
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        
<p><b><a name="allowUnresolvedPomDependencies">allowUnresolvedPomDependencies</a>:</b></p>
        
<div>If set to true, an exception is throws when &quot;usePomDependencies&quot; is
set to true and some dependency version could not be resolved in
the Maven POM.</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="disableExtendingMavenClasspath">disableExtendingMavenClasspath</a>:</b></p>
        
<div>If set to <tt>true</tt> the Maven classpath (either scope
&quot;provided&quot; or &quot;test&quot;) will not be extended by the artifacts being
referenced in the model. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p></div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="model">model</a>:</b></p>
        
<div>Inlined model. Is processed first and afterwards merged with any
model found in <tt>modelDirectory</tt>. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Since</b>: <tt>1.3</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="modelDirectory">modelDirectory</a>:</b></p>
        
<div>The model directory containing the provision models. This parameter
is evaluated in the <tt>DependencyLifecycleParticipant</tt>. As
default first <tt>${basedir}/src/main/provisioning</tt> and
then <tt>${basedir}/src/test/provisioning</tt> is used (in case
the former does not exist). 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p></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/provisioning</tt></li>
        </ul><hr />
<p><b><a name="modelPattern">modelPattern</a>:</b></p>
        
<div>The model file name pattern to consider. 

<p>This parameter is evaluated in the
<tt>ModelPreprocessor</tt>, i.e. outside of the Mojo execution
therefore it must not be configured within an <a class="externalLink" href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag">execution
tag</a> but rather in the global configuration section for this
plugin.</p></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>((.*)\.txt|(.*)\.model)</tt></li>
        </ul><hr />
<p><b><a name="usePomDependencies">usePomDependencies</a>:</b></p>
        
<div>If set to <tt>true</tt>, Artifact dependencies from
provisioning file without explicit version are tried to be resolved
against the versions given in the Maven POM. The following sections
in the effective pom are considered during resolving the version: 

<ol style="list-style-type: decimal">

<li>The project's artifact itself</li>

<li>The project's dependencies</li>

<li>The project's dependencyManagement</li>
</ol></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="usePomVariables">usePomVariables</a>:</b></p>
        
<div>If set to <tt>true</tt>, properties from the Maven POM can be
used as variables in the provisioning files. The resolved variables
are added to the generated provisioning file, so other tools using
this model do not have to resolve them themselves.</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>
      </div>
    </div>
  

        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2007&#x2013;2018
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>
