<?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.mng3813</groupId>
  <artifactId>test</artifactId>
  <version>1.0</version>

  <name>Maven Integration Test :: MNG-3813</name> 
  <description>
    Verify that the ordering of the plugin class path matches the ordering of the dependencies as given in the POM.
  </description>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-class-loader</artifactId>
        <version>2.1-SNAPSHOT</version>
        <!--
        The following dependency section spans this dependency tree:
          dep-a
            dep-aa
            dep-ac
            dep-ab
            dep-ad
          dep-c
          dep-b
          dep-d
        Given this tree, the correct/expected class path is:
          dep-a, dep-aa, dep-ac, dep-ab, dep-ad, dep-c, dep-b, dep-d
        All of these dependencies contain the same class/resource so we can precisely track their ordering on the
        class path by enumerating their resource URLs. The class path is sufficiently long to guard against random
        test success.
        -->
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.its.mng3813</groupId>
            <artifactId>dep-a</artifactId>
            <version>0.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.its.mng3813</groupId>
            <artifactId>dep-c</artifactId>
            <version>0.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.its.mng3813</groupId>
            <artifactId>dep-b</artifactId>
            <version>0.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.its.mng3813</groupId>
            <artifactId>dep-d</artifactId>
            <version>0.1</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>load</id>
            <phase>validate</phase>
            <configuration>
              <classNames>org.apache.maven.its.mng3813.SomeClass</classNames>
              <resourcePaths>org/apache/maven/its/mng3813/SomeClass.class</resourcePaths>
              <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
            </configuration>
            <goals>
              <goal>load</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
