<?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>
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.maven.its.mng3379</groupId>
  <artifactId>test</artifactId>
  <packaging>jar</packaging>
  <version>1</version>

  <name>Maven Integration Test :: MNG-3379</name>
  <description>
    Tests that parallel downloads of artifacts from both the same and from different group ids don't corrupt
    the local repo.
  </description>

  <dependencies>
    <!-- group A -->
    <dependency>
      <groupId>org.apache.maven.its.mng3379.a</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.a</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.a</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>sources</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.a</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>javadoc</classifier>
    </dependency>
    <!-- group B -->
    <dependency>
      <groupId>org.apache.maven.its.mng3379.b</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.b</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.b</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>sources</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.b</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>javadoc</classifier>
    </dependency>
    <!-- group C -->
    <dependency>
      <groupId>org.apache.maven.its.mng3379.c</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.c</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.c</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>sources</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.c</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>javadoc</classifier>
    </dependency>
    <!-- group D -->
    <dependency>
      <groupId>org.apache.maven.its.mng3379.d</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.d</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.d</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>sources</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng3379.d</groupId>
      <artifactId>x</artifactId>
      <version>[0.2-SNAPSHOT,)</version>
      <classifier>javadoc</classifier>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-dependency-resolution</artifactId>
        <version>2.1-SNAPSHOT</version>
        <executions>
          <execution>
            <id>test</id>
            <phase>validate</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
