<!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:prepare-package</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:prepare-package"></a>slingstart:prepare-package</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.apache.sling:slingstart-maven-plugin:1.8.2:prepare-package</p>
      
<p><b>Description</b>:</p>
      
<div>Prepare the packaging of the Sling quickstart artifact (either JAR
or WAR).</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>process-sources</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="#createWebapp">createWebapp</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to <tt>true</tt> creates a WAR artifact in addition to
the standalone JAR from the model.<br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<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="a">
            
<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="b">
            
<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="a">
            
<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="b">
            
<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="a">
            
<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="createWebapp">createWebapp</a>:</b></p>
        
<div>If set to <tt>true</tt> creates a WAR artifact in addition to
the standalone JAR from the model.</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>
