<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2018-12-17
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<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="20181217" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Tycho p2 Director Plugin &#x2013; tycho-p2-director:archive-products</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.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.3.0.min.js"></script>

    
            </head>
        <body class="topBarDisabled">
          
        
    
        <div class="container-fluid">
          <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: 2018-12-17</li>
                  <li class="divider">|</li> <li id="projectVersion">Version: 1.3.0</li>
                      
                
                    
      
                            </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Tycho</li>
                                
      <li>
    
                          <a href="../../index.html" title="Introduction">
          <i class="none"></i>
        Introduction</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-compiler-plugin/plugin-info.html" title="Compiler Plugin">
          <i class="none"></i>
        Compiler Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-packaging-plugin/plugin-info.html" title="Packaging Plugin">
          <i class="none"></i>
        Packaging Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../BuildProperties.html" title="Build Properties">
          <i class="none"></i>
        Build Properties</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-surefire/tycho-surefire-plugin/plugin-info.html" title="Surefire Plugin">
          <i class="none"></i>
        Surefire Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-p2/tycho-p2-publisher-plugin/plugin-info.html" title="p2 Publisher Plugin">
          <i class="none"></i>
        p2 Publisher Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-p2/tycho-p2-repository-plugin/plugin-info.html" title="p2 Repository Plugin">
          <i class="none"></i>
        p2 Repository Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-p2/tycho-p2-director-plugin/plugin-info.html" title="p2 Director Plugin">
          <i class="none"></i>
        p2 Director Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-source-plugin/plugin-info.html" title="Source Plugin">
          <i class="none"></i>
        Source Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-release/tycho-versions-plugin/plugin-info.html" title="Versions Plugin">
          <i class="none"></i>
        Versions Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../tycho-pomgenerator-plugin/plugin-info.html" title="POM Generator Plugin">
          <i class="none"></i>
        POM Generator Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../../TychoProperties.html" title="Tycho Properties">
          <i class="none"></i>
        Tycho Properties</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <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>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            
  
    <div class="section">
<h2><a name="tycho-p2-director:archive-products"></a>tycho-p2-director:archive-products</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.eclipse.tycho:tycho-p2-director-plugin:1.3.0:archive-products</p>
      
<p><b>Description</b>:</p>
      
<div>
<p>Creates archives with the product installations.</p></div>
      
<p><b>Attributes</b>:</p>
      
<ul>
        
<li>Requires a Maven project to be executed.</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><tt><a href="#forkedProcessTimeoutInSeconds">&lt;forkedProcessTimeoutInSeconds&gt;</a></tt></td>
            
<td><tt>int</tt></td>
            
<td><tt>-</tt></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>: <tt>0</tt>.<br /><b>User property is</b>: <tt>p2.timeout</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><tt><a href="#formats">&lt;formats&gt;</a></tt></td>
            
<td><tt>Map</tt></td>
            
<td><tt>-</tt></td>
            
<td>
<p>Maps os to format. By default a zip file will be created. For
example, the following configuration will create tar.gz product
archives for Linux</p>

<div>
<pre>
&lt;formats&gt;
  &lt;linux&gt;tar.gz&lt;/linux&gt;
&lt;/formats&gt;
</pre></div>

Supported formats 

<ul>

<li>zip</li>

<li>tar.gz</li>
</ul>
<br />
<br /><br /></td>
          </tr>
          
<tr class="b">
            
<td><tt><a href="#products">&lt;products&gt;</a></tt></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></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 <tt>attachId</tt> (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;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><tt>rootFolder</tt> - 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><tt>rootFolders</tt> - OS-specific installation root folders,
overriding <tt>rootFolder</tt>. Allowed children are
<tt>&lt;macosx&gt;</tt>, <tt>&lt;win32&gt;</tt> and
<tt>&lt;linux&gt;</tt> or any other OS supported by p2. Since
0.18.0</li>
</ul><br /></td>
          </tr>
        </table>
      </div>
      
<div class="section">
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        
<div class="section">
<h4><a name="aforkedProcessTimeoutInSeconds"></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>: <tt>int</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>p2.timeout</tt></li>
          
<li><b>Default</b>: <tt>0</tt></li>
        </ul><hr /></div>
<div class="section">
<h4><a name="aformats"></a><b><a name="formats">&lt;formats&gt;</a></b></h4>
        
<div>
<p>Maps os to format. By default a zip file will be created. For
example, the following configuration will create tar.gz product
archives for Linux</p>

<div>
<pre>
&lt;formats&gt;
  &lt;linux&gt;tar.gz&lt;/linux&gt;
&lt;/formats&gt;
</pre></div>

Supported formats 

<ul>

<li>zip</li>

<li>tar.gz</li>
</ul>
<br />
<br /></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.Map</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr /></div>
<div class="section">
<h4><a name="aproducts"></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 <tt>attachId</tt> (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;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><tt>rootFolder</tt> - 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><tt>rootFolders</tt> - OS-specific installation root folders,
overriding <tt>rootFolder</tt>. Allowed children are
<tt>&lt;macosx&gt;</tt>, <tt>&lt;win32&gt;</tt> and
<tt>&lt;linux&gt;</tt> or any other OS supported by p2. Since
0.18.0</li>
</ul></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul>
      </div></div>
    </div>
  

                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2008-2018
                        <a href="http://www.eclipse.org/">Eclipse Foundation</a>.
            All Rights Reserved.      
                    
      </div>

        
        
                </div>
    </footer>
  </body>
</html>
