<?xml version='1.0' encoding='UTF-8'?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         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>
    <artifactId>maven-plugins</artifactId>
    <groupId>org.apache.maven.plugins</groupId>
    <version>28</version>
    <relativePath>../../pom/maven/maven-plugins/pom.xml</relativePath>
  </parent>

  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.0-SNAPSHOT</version>
  <packaging>maven-plugin</packaging>

  <name>Apache Maven Assembly Plugin</name>
  <description>A Maven plugin to create archives of your project's sources, classes, dependencies etc. from flexible assembly descriptors.</description>

  <prerequisites>
    <maven>${mavenVersion}</maven>
  </prerequisites>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/</developerConnection>
    <url>http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/</url>
  </scm>
  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/MASSEMBLY</url>
  </issueManagement>
  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
    </site>
  </distributionManagement>

  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>

    <mdoVersion>1.1.3</mdoVersion>
    <mavenArchiverVersion>3.0.0</mavenArchiverVersion>
    <mavenFilteringVersion>3.0.0</mavenFilteringVersion>
    <mavenVersion>3.0</mavenVersion>
    <testOutputToFile>true</testOutputToFile>
    <checkstyle.violation.ignore>RedundantThrows,NewlineAtEndOfFile,ParameterNumber,MethodLength,FileLength,ModifierOrder,JavadocMethod</checkstyle.violation.ignore>
  </properties>

  <contributors>
    <contributor>
      <name>Stephen Colebourne</name>
    </contributor>
    <contributor>
      <name>Tony Jewell</name>
    </contributor>
  </contributors>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-compat</artifactId>
      <version>${mavenVersion}</version>
<!-- <scope>test</scope> -->
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-artifact</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-model</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>maven-common-artifact-filters</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>2.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-interpolation</artifactId>
      <version>1.22</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-archiver</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>file-management</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>maven-shared-io</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
  </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>maven-filtering</artifactId>
      <version>${mavenFilteringVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-io</artifactId>
      <version>2.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-archiver</artifactId>
      <version>${mavenArchiverVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>3.0.22</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-testing</groupId>
      <artifactId>maven-plugin-testing-tools</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-testing</groupId>
      <artifactId>maven-test-tools</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymockclassextension</artifactId>
      <version>2.5.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>2.5.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jdom</groupId>
      <artifactId>jdom</artifactId>
      <version>1.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.0-FCS</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>saxpath</groupId>
      <artifactId>saxpath</artifactId>
      <version>1.0-FCS</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-component-annotations</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>${project.build.directory}/generated-resources/plexus</directory>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>org.codehaus.plexus</groupId>
        <artifactId>plexus-component-metadata</artifactId>
        <version>1.6</version>
        <executions>
          <execution>
            <id>descriptors</id>
            <goals>
              <goal>generate-metadata</goal>
              <goal>generate-test-metadata</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.modello</groupId>
        <artifactId>modello-maven-plugin</artifactId>
        <version>1.8.3</version>
        <configuration>
          <version>${mdoVersion}</version>
          <models>
            <model>src/main/mdo/descriptor.mdo</model>
            <model>src/main/mdo/component.mdo</model>
          </models>
        </configuration>
        <executions>
          <execution>
            <id>mdo</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>xpp3-reader</goal>
              <goal>xpp3-writer</goal>
              <goal>java</goal>
              <goal>xsd</goal>
            </goals>
          </execution>
          <execution>
            <id>mdo-site</id>
            <phase>pre-site</phase>
            <goals>
              <goal>xdoc</goal>
              <goal>xsd</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.6</version>
          <configuration>
            <escapeString>\</escapeString>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <redirectTestOutputToFile>${testOutputToFile}</redirectTestOutputToFile>
            <systemPropertyVariables>
              <!-- NOTE: Ensure the tmp dir configured for Surefire exists or some JREs (e.g. 1.5) will fail to create temp files -->
              <java.io.tmpdir>${project.build.testOutputDirectory}</java.io.tmpdir>
            </systemPropertyVariables>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes combine.children="append">
              <!--
                These files contain real repository artifacts.
              -->
              <exclude>src/it/projects/basic-features/outputFileNameMapping-withArtifactBaseVersion/repository/org/codehaus/plexus/plexus-utils/**</exclude>
              <exclude>src/functional-tests/remote-repo/assembly/dependency-artifact/**</exclude>
              <!-- These files are only resources for integration tests. -->
              <exclude>src/it/projects/repositories/repo-with-snapshot-parents/child/remote-repository/org/codehaus/plexus/plexus-utils/1.4.3-SNAPSHOT/plexus-utils-1.4.3-SNAPSHOT.pom</exclude>
              <exclude>src/it/projects/container-descriptors/metaInf-services-aggregation/**/*</exclude>
              <exclude>src/it/projects/container-descriptors/metaInf-spring-aggregation/**/*</exclude>
              <!-- The following is used to exclude only txt files which don't have a license header -->
              <exclude>src/it/**/*.txt</exclude>
              <!-- The following is used to exclude files with the extension *.file -->
              <exclude>src/it/**/*.file</exclude>
              <exclude>src/it/projects/filtering-feature/filters-defined-in-build/src/main/config/**</exclude>
              <exclude>src/it/projects/bugs/massembly-731/**</exclude>
            </excludes>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <profile>
      <id>run-its</id>
      <repositories>
        <repository>
          <id>codehaus.org</id>
          <url>http://snapshots.repository.codehaus.org</url>
          <releases>
            <enabled>false</enabled>
          </releases>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>codehaus.snapshots</id>
          <url>http://snapshots.repository.codehaus.org</url>
        </pluginRepository>
        <pluginRepository>
          <id>apache.snapshots</id>
          <url>http://repository.apache.org/snapshots</url>
          <releases>
            <enabled>false</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>

      <properties>
        <invokerPluginVersion>2.0.0</invokerPluginVersion>
        <test.remote.repo.url>file://${project.build.testOutputDirectory}/remote-repository</test.remote.repo.url>
        <it.streamLogs>false</it.streamLogs>
        <testVersion>${project.version}</testVersion>
        <useJvmChmod>false</useJvmChmod>
      </properties>

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-invoker-plugin</artifactId>
            <version>${invokerPluginVersion}</version>
            <configuration>
              <properties>
                <useJvmChmod>${useJvmChmod}</useJvmChmod>
                <testVersion>${testVersion}</testVersion>
                <invokerPluginVersion>${invokerPluginVersion}</invokerPluginVersion>
              </properties>
              <showVersion>true</showVersion>
            </configuration>
            <executions>
              <execution>
                <id>integration-test</id>
                <configuration>
                  <cloneClean>true</cloneClean>
                  <testPropertiesFile>test.properties</testPropertiesFile>
                  <setupIncludes>
                    <setupInclude>it-project-parent/pom.xml</setupInclude>
                  </setupIncludes>
                  <pomIncludes>
                    <pomInclude>projects/*/*/pom.xml</pomInclude>
                    <pomInclude>projects/descriptor-refs/*/*/pom.xml</pomInclude>
                    <pomInclude>projects/multimodule/multimodule-siblingParent/parent/pom.xml</pomInclude>
                  </pomIncludes>
                  <streamLogs>${it.streamLogs}</streamLogs>
                  <pomExcludes>
                    <pomExclude>projects/repositories/repo-with-snapshot-parents/pom.xml</pomExclude>
                    <pomExclude>projects/dependency-sets/depSet-transFromProfile/pom.xml</pomExclude>
                  </pomExcludes>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.9</version>
              </dependency>
              <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
