<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 from target/generated-site/xdoc/materialize-products-mojo.xml at 2022-02-28
 | Rendered using Apache Maven Fluido Skin 1.10.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
    <title>Tycho p2 Director Plugin &#x2013; tycho-p2-director:materialize-products</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.10.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
    <script src="./js/apache-maven-fluido-1.10.0.min.js"></script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <header>
        <div id="banner">
          <div class="pull-left"><div id="bannerLeft"><h2>Tycho p2 Director 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: 2022-02-28<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 2.7.0</li>
          </ul>
        </div>
      </header>
      <div class="row-fluid">
        <header id="leftColumn" class="span2">
          <nav class="well sidebar-nav">
  <ul class="nav nav-list">
   <li class="nav-header">Tycho</li>
    <li><a href="../../index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
    <li><a href="../../target-platform-configuration/plugin-info.html" title="Target Platform Configuration"><span class="none"></span>Target Platform Configuration</a></li>
    <li><a href="../../tycho-compiler-plugin/plugin-info.html" title="Compiler Plugin"><span class="none"></span>Compiler Plugin</a></li>
    <li><a href="../../tycho-packaging-plugin/plugin-info.html" title="Packaging Plugin"><span class="none"></span>Packaging Plugin</a></li>
    <li><a href="../../tycho-surefire-plugin/plugin-info.html" title="Surefire Plugin"><span class="none"></span>Surefire Plugin</a></li>
    <li><a href="../../tycho-p2/tycho-p2-publisher-plugin/plugin-info.html" title="p2 Publisher Plugin"><span class="none"></span>p2 Publisher Plugin</a></li>
    <li><a href="../../tycho-p2/tycho-p2-repository-plugin/plugin-info.html" title="p2 Repository Plugin"><span class="none"></span>p2 Repository Plugin</a></li>
    <li><a href="../../tycho-p2/tycho-p2-director-plugin/plugin-info.html" title="p2 Director Plugin"><span class="none"></span>p2 Director Plugin</a></li>
    <li><a href="../../tycho-source-plugin/plugin-info.html" title="Source Plugin"><span class="none"></span>Source Plugin</a></li>
    <li><a href="../../tycho-release/tycho-versions-plugin/plugin-info.html" title="Versions Plugin"><span class="none"></span>Versions Plugin</a></li>
    <li><a href="../../tycho-pomgenerator-plugin/plugin-info.html" title="POM Generator Plugin"><span class="none"></span>POM Generator Plugin</a></li>
    <li><a href="" title="Properties"><span class="icon-chevron-down"></span>Properties</a>
     <ul class="nav nav-list">
      <li><a href="../../BuildProperties.html" title="Build Properties"><span class="none"></span>Build Properties</a></li>
      <li><a href="../../TychoProperties.html" title="Tycho Properties"><span class="none"></span>Tycho Properties</a></li>
     </ul></li>
   <li class="nav-header">Tycho Extras</li>
    <li><a href="../../tycho-extras/index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
    <li><a href="../../tycho-extras/tycho-p2-extras-plugin/plugin-info.html" title="P2 Extras Plugin"><span class="none"></span>P2 Extras Plugin</a></li>
    <li><a href="../../tycho-extras/target-platform-validation-plugin/plugin-info.html" title="Target Platform Validation Plugin"><span class="none"></span>Target Platform Validation Plugin</a></li>
    <li><a href="../../tycho-extras/tycho-eclipserun-plugin/plugin-info.html" title="Eclipserun Plugin"><span class="none"></span>Eclipserun Plugin</a></li>
    <li><a href="../../tycho-extras/tycho-document-bundle-plugin/plugin-info.html" title="Document Bundle Plugin"><span class="none"></span>Document Bundle Plugin</a></li>
    <li><a href="../../tycho-extras/tycho-source-feature-plugin/plugin-info.html" title="Source Feature Generation Plugin"><span class="none"></span>Source Feature Generation Plugin</a></li>
    <li><a href="../../tycho-extras/tycho-pack200/index.html" title="Pack200 Plugins"><span class="icon-chevron-down"></span>Pack200 Plugins</a>
     <ul class="nav nav-list">
      <li><a href="../../tycho-extras/tycho-pack200/tycho-pack200a-plugin/plugin-info.html" title="Normalization Plugin"><span class="none"></span>Normalization Plugin</a></li>
      <li><a href="../../tycho-extras/tycho-pack200/tycho-pack200b-plugin/plugin-info.html" title="Pack Plugin"><span class="none"></span>Pack Plugin</a></li>
     </ul></li>
  </ul>
          </nav>
          <div class="well sidebar-nav">
            <hr />
            <div id="poweredBy">
              <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>
        </header>
        <main id="bodyColumn"  class="span10" >

  
    <section>
<h2><a name="tycho-p2-director:materialize-products"></a>tycho-p2-director:materialize-products</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.eclipse.tycho:tycho-p2-director-plugin:2.7.0:materialize-products</p>
      
<p><b>Description</b>:</p>
      
<div>
<p>Creates product installations for the products defined in the
project.</p></div>
      
<p><b>Attributes</b>:</p>
      
<ul>
        
<li>Requires a Maven project to be executed.</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>: <code>package</code>.</li>
      </ul>
      <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 align="left"><code><a href="#directorRuntime">&lt;directorRuntime&gt;</a></code></td>
            
<td><code>DirectorMojo$DirectorRuntimeType</code></td>
            
<td><code>-</code></td>
            
<td>
<p>Runtime in which the director application is executed. Can
be</p>

<ul>

<li><code>internal</code> - to use the director application from
Tycho's embedded OSGi runtime (default)</li>

<li><code>standalone</code> - to create and use a stand-alone
installation of the director application. This option is needed if
the product to be installed includes artifacts with
meta-requirements (e.g. to a non-standard touchpoint action).
Requires that the <code>source</code> parameter is set to
<code>repository</code>.</li>
</ul><br /><b>Default value is</b>: <code>internal</code>.<br /></td>
          </tr>
          
<tr class="a">
            
<td align="left"><code><a href="#forkedProcessTimeoutInSeconds">&lt;forkedProcessTimeoutInSeconds&gt;</a></code></td>
            
<td><code>int</code></td>
            
<td><code>-</code></td>
            
<td>Kill the forked process after a certain number of seconds. If set
to 0, wait forever for the process, never timing out.<br /><b>Default value is</b>: <code>0</code>.<br /><b>User property is</b>: <code>p2.timeout</code>.<br /></td>
          </tr>
          
<tr class="b">
            
<td align="left"><code><a href="#installFeatures">&lt;installFeatures&gt;</a></code></td>
            
<td><code>boolean</code></td>
            
<td><code>-</code></td>
            
<td>
<p>Include the feature JARs in installation. (Technically, this
sets the property <code>org.eclipse.update.install.features</code> to
<code>true</code> in the p2 profile.)</p><br /><b>Default value is</b>: <code>true</code>.<br /></td>
          </tr>
          
<tr class="a">
            
<td align="left"><code><a href="#products">&lt;products&gt;</a></code></td>
            
<td><code>List</code></td>
            
<td><code>-</code></td>
            
<td>
<p>Selection of products to be installed and configuration per
product.</p>

<p>If the project contains more than one product file, you need to
choose for which ones you want to create distribution archives. If
you choose to install more than one product, you need to specify
the <code>attachId</code> (which becomes a part of the classifier) to
make the classifiers unique. Example:</p>

<div>
<pre>
&lt;plugin&gt;
  &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
  &lt;artifactId&gt;tycho-p2-director-plugin&lt;/artifactId&gt;
  &lt;version&gt;${tycho-version}&lt;/version&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;id&gt;create-distributions&lt;/id&gt;
      &lt;goals&gt;
        &lt;goal&gt;materialize-products&lt;/goal&gt;
        &lt;goal&gt;archive-products&lt;/goal&gt;
      &lt;/goals&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
  &lt;configuration&gt;
    &lt;products&gt;
      &lt;product&gt;
        &lt;!-- select product with ID product.id; the archives get the classifiers &quot;&lt;os&gt;.&lt;ws&gt;.&lt;arch&gt;&quot; --&gt;
        &lt;id&gt;product.id&lt;/id&gt;
      &lt;/product&gt;
      &lt;product&gt;
        &lt;!-- select product with ID other.product.id for the classifiers &quot;other-&lt;os&gt;.&lt;ws&gt;.&lt;arch&gt;&quot; --&gt;
        &lt;id&gt;other.product.id&lt;/id&gt;
        &lt;attachId&gt;other&lt;/attachId&gt;
      &lt;/product&gt;
    &lt;/products&gt;
  &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div>

The following snippet shows the optional parameters which can be
specified per product: 

<div>
<pre>
  &lt;configuration&gt;
    &lt;products&gt;
      &lt;product&gt;
        &lt;id&gt;product.id&lt;/id&gt;
        &lt;!-- optional parameters --&gt;
        &lt;rootFolder&gt;&lt;/rootFolder&gt;
        &lt;rootFolders&gt;
          &lt;macosx&gt;&lt;/macosx&gt;
          &lt;linux&gt;&lt;/linux&gt;
          &lt;freebsd&gt;&lt;/freebsd&gt;
          &lt;win32&gt;&lt;/win32&gt;
        &lt;/rootFolders&gt;
      &lt;/product&gt;
      ...
    &lt;/products&gt;
  &lt;/configuration&gt;
</pre></div>

Details on the product-specific configuration parameters: 

<ul>

<li><code>rootFolder</code> - The path where the installed product
shall be stored in the archive, e.g. &quot;eclipse&quot;. By default, the
product is stored in the archive root.</li>

<li><code>rootFolders</code> - OS-specific installation root folders,
overriding <code>rootFolder</code>. Allowed children are
<code>&lt;macosx&gt;</code>, <code>&lt;win32&gt;</code>,
<code>&lt;linux&gt;</code> and <code>&lt;freebsd&gt;</code> or any other OS
supported by p2. Since 0.18.0</li>
</ul><br /></td>
          </tr>
          
<tr class="b">
            
<td align="left"><code><a href="#profile">&lt;profile&gt;</a></code></td>
            
<td><code>String</code></td>
            
<td><code>-</code></td>
            
<td>
<p>The name of the p2 profile to be created.</p><br /><b>Default value is</b>: <code>DefaultProfile</code>.<br /></td>
          </tr>
          
<tr class="a">
            
<td align="left"><code><a href="#profileNames">&lt;profileNames&gt;</a></code></td>
            
<td><code>List</code></td>
            
<td><code>-</code></td>
            
<td>(no description)<br /></td>
          </tr>
          
<tr class="b">
            
<td align="left"><code><a href="#profileProperties">&lt;profileProperties&gt;</a></code></td>
            
<td><code>Map</code></td>
            
<td><code>-</code></td>
            
<td>Additional profile properties to set when materializing the product<br /></td>
          </tr>
          
<tr class="a">
            
<td align="left"><code><a href="#source">&lt;source&gt;</a></code></td>
            
<td><code>DirectorMojo$InstallationSource</code></td>
            
<td><code>-</code></td>
            
<td>
<p>Source repositories to be used in the director calls. Can be</p>

<ul>

<li><code>targetPlatform</code> - to use the target platform as
source (default)</li>

<li><code>repository</code> - to use the p2 repository in
<code>target/repository/</code> as source. With this option, the build
implicitly verifies that it would also be possible to install the
product from that repository with an external director
application.</li>
</ul><br /><b>Default value is</b>: <code>targetPlatform</code>.<br /></td>
          </tr>
        </table>
      </section>
      <section>
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        <section>
<h4><a name="a.3CdirectorRuntime.3E"></a><b><a name="directorRuntime">&lt;directorRuntime&gt;</a></b></h4>
        
<div>
<p>Runtime in which the director application is executed. Can
be</p>

<ul>

<li><code>internal</code> - to use the director application from
Tycho's embedded OSGi runtime (default)</li>

<li><code>standalone</code> - to create and use a stand-alone
installation of the director application. This option is needed if
the product to be installed includes artifacts with
meta-requirements (e.g. to a non-standard touchpoint action).
Requires that the <code>source</code> parameter is set to
<code>repository</code>.</li>
</ul></div>
        
<ul>
          
<li><b>Type</b>: <code>org.eclipse.tycho.plugins.p2.director.DirectorMojo$DirectorRuntimeType</code></li>
          
<li><b>Required</b>: <code>No</code></li>
          
<li><b>Default</b>: <code>internal</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3CforkedProcessTimeoutInSeconds.3E"></a><b><a name="forkedProcessTimeoutInSeconds">&lt;forkedProcessTimeoutInSeconds&gt;</a></b></h4>
        
<div>Kill the forked process after a certain number of seconds. If set
to 0, wait forever for the process, never timing out.</div>
        
<ul>
          
<li><b>Type</b>: <code>int</code></li>
          
<li><b>Required</b>: <code>No</code></li>
          
<li><b>User Property</b>: <code>p2.timeout</code></li>
          
<li><b>Default</b>: <code>0</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3CinstallFeatures.3E"></a><b><a name="installFeatures">&lt;installFeatures&gt;</a></b></h4>
        
<div>
<p>Include the feature JARs in installation. (Technically, this
sets the property <code>org.eclipse.update.install.features</code> to
<code>true</code> in the p2 profile.)</p></div>
        
<ul>
          
<li><b>Type</b>: <code>boolean</code></li>
          
<li><b>Required</b>: <code>No</code></li>
          
<li><b>Default</b>: <code>true</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3Cproducts.3E"></a><b><a name="products">&lt;products&gt;</a></b></h4>
        
<div>
<p>Selection of products to be installed and configuration per
product.</p>

<p>If the project contains more than one product file, you need to
choose for which ones you want to create distribution archives. If
you choose to install more than one product, you need to specify
the <code>attachId</code> (which becomes a part of the classifier) to
make the classifiers unique. Example:</p>

<div>
<pre>
&lt;plugin&gt;
  &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
  &lt;artifactId&gt;tycho-p2-director-plugin&lt;/artifactId&gt;
  &lt;version&gt;${tycho-version}&lt;/version&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;id&gt;create-distributions&lt;/id&gt;
      &lt;goals&gt;
        &lt;goal&gt;materialize-products&lt;/goal&gt;
        &lt;goal&gt;archive-products&lt;/goal&gt;
      &lt;/goals&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
  &lt;configuration&gt;
    &lt;products&gt;
      &lt;product&gt;
        &lt;!-- select product with ID product.id; the archives get the classifiers &quot;&lt;os&gt;.&lt;ws&gt;.&lt;arch&gt;&quot; --&gt;
        &lt;id&gt;product.id&lt;/id&gt;
      &lt;/product&gt;
      &lt;product&gt;
        &lt;!-- select product with ID other.product.id for the classifiers &quot;other-&lt;os&gt;.&lt;ws&gt;.&lt;arch&gt;&quot; --&gt;
        &lt;id&gt;other.product.id&lt;/id&gt;
        &lt;attachId&gt;other&lt;/attachId&gt;
      &lt;/product&gt;
    &lt;/products&gt;
  &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div>

The following snippet shows the optional parameters which can be
specified per product: 

<div>
<pre>
  &lt;configuration&gt;
    &lt;products&gt;
      &lt;product&gt;
        &lt;id&gt;product.id&lt;/id&gt;
        &lt;!-- optional parameters --&gt;
        &lt;rootFolder&gt;&lt;/rootFolder&gt;
        &lt;rootFolders&gt;
          &lt;macosx&gt;&lt;/macosx&gt;
          &lt;linux&gt;&lt;/linux&gt;
          &lt;freebsd&gt;&lt;/freebsd&gt;
          &lt;win32&gt;&lt;/win32&gt;
        &lt;/rootFolders&gt;
      &lt;/product&gt;
      ...
    &lt;/products&gt;
  &lt;/configuration&gt;
</pre></div>

Details on the product-specific configuration parameters: 

<ul>

<li><code>rootFolder</code> - The path where the installed product
shall be stored in the archive, e.g. &quot;eclipse&quot;. By default, the
product is stored in the archive root.</li>

<li><code>rootFolders</code> - OS-specific installation root folders,
overriding <code>rootFolder</code>. Allowed children are
<code>&lt;macosx&gt;</code>, <code>&lt;win32&gt;</code>,
<code>&lt;linux&gt;</code> and <code>&lt;freebsd&gt;</code> or any other OS
supported by p2. Since 0.18.0</li>
</ul></div>
        
<ul>
          
<li><b>Type</b>: <code>java.util.List</code></li>
          
<li><b>Required</b>: <code>No</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3Cprofile.3E"></a><b><a name="profile">&lt;profile&gt;</a></b></h4>
        
<div>
<p>The name of the p2 profile to be created.</p></div>
        
<ul>
          
<li><b>Type</b>: <code>java.lang.String</code></li>
          
<li><b>Required</b>: <code>No</code></li>
          
<li><b>Default</b>: <code>DefaultProfile</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3CprofileNames.3E"></a><b><a name="profileNames">&lt;profileNames&gt;</a></b></h4>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: <code>java.util.List</code></li>
          
<li><b>Required</b>: <code>No</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3CprofileProperties.3E"></a><b><a name="profileProperties">&lt;profileProperties&gt;</a></b></h4>
        
<div>Additional profile properties to set when materializing the product</div>
        
<ul>
          
<li><b>Type</b>: <code>java.util.Map</code></li>
          
<li><b>Required</b>: <code>No</code></li>
        </ul><hr /></section><section>
<h4><a name="a.3Csource.3E"></a><b><a name="source">&lt;source&gt;</a></b></h4>
        
<div>
<p>Source repositories to be used in the director calls. Can be</p>

<ul>

<li><code>targetPlatform</code> - to use the target platform as
source (default)</li>

<li><code>repository</code> - to use the p2 repository in
<code>target/repository/</code> as source. With this option, the build
implicitly verifies that it would also be possible to install the
product from that repository with an external director
application.</li>
</ul></div>
        
<ul>
          
<li><b>Type</b>: <code>org.eclipse.tycho.plugins.p2.director.DirectorMojo$InstallationSource</code></li>
          
<li><b>Required</b>: <code>No</code></li>
          
<li><b>Default</b>: <code>targetPlatform</code></li>
        </ul>
      </section></section>
    </section>
  

        </main>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>&#169;      2008&#x2013;2022
<a href="http://www.eclipse.org/">Eclipse Foundation</a>
</p>
        </div>
      </div>
    </footer>
<script>
	if(anchors) {
	  anchors.add();
	}
</script>
  </body>
</html>
