<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) 2009, 2019 Xored Software Inc and others.
    All rights reserved. This program and the accompanying materials
    are made available under the terms of the Eclipse Public License v1.0
    which accompanies this distribution, and is available at
    http://www.eclipse.org/legal/epl-v10.html
     
    Contributors:
    	Xored Software Inc - initial API and implementation and/or initial documentation
 -->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.eclipse.rcptt.external.dependencies</groupId>
  	<artifactId>bundles</artifactId>
    <version>2.4.0-SNAPSHOT</version>
  </parent>
  
  <artifactId>org.eclipse.rcptt.updates.extra</artifactId>
  <packaging>eclipse-plugin</packaging>


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>dependencies</directory>
              <includes>
                <include>**/*</include>
              </includes>
              <followSymlinks>false</followSymlinks>
            </fileset>
          </filesets>
        </configuration>
      </plugin>

      
      <plugin>
	<groupId>org.eclipse.tycho.extras</groupId>
	<artifactId>tycho-p2-extras-plugin</artifactId>
	<executions>
	  <execution>
	    <phase>generate-resources</phase>
	    <goals>
	      <goal>mirror</goal>
	    </goals>
	  </execution>
	</executions>
	<configuration>
	  <source>
	    <repository>
	      <url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository/</url>
	      <layout>p2</layout>
	    </repository>
	  </source>
	  
	  <destination>${project.basedir}/dependencies</destination>
	  <followStrictOnly>true</followStrictOnly>
	  <includeOptional>true</includeOptional>
	  <includeNonGreedy>true</includeNonGreedy>
	  <latestVersionOnly>true</latestVersionOnly>
	  <mirrorMetadataOnly>false</mirrorMetadataOnly>
	  <compress>true</compress>
	  <append>false</append>
	  <includePacked>false</includePacked>

	  <ius>
	    <iu><id>org.apache.poi</id></iu>
	    <iu><id>org.apache.poi.ooxml</id></iu>
	    <iu><id>org.apache.poi.ooxml.schemas</id></iu>
	    <iu><id>org.apache.xmlbeans</id></iu>
	    <iu><id>org.dom4j</id></iu>
	  </ius>
	</configuration>
      </plugin>
    </plugins>
  </build>
</project>




