<?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.it0086</groupId>
  <artifactId>maven-it-it0086</artifactId>
  <version>1.0</version>

  <name>Maven Integration Test :: it0086</name>
  <description>
    Verify that a plugin dependency class can be loaded from both the plugin classloader and the context classloader
    available to the plugin.
  </description>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-class-loader</artifactId>
        <version>2.1-SNAPSHOT</version>
        <executions>
          <execution>
            <id>load</id>
            <phase>validate</phase>
            <configuration>
              <classNames>org.apache.maven.plugin.coreit.ClassA,org.apache.maven.plugin.coreit.ClassB,org.apache.maven.plugin.coreit.SomeClass</classNames>
              <resourcePaths>org/apache/maven/plugin/coreit/a.properties,org/apache/maven/plugin/coreit/b.properties,org/apache/maven/plugin/coreit/it.properties</resourcePaths>
              <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
              <contextClassLoaderOutput>target/tccl.properties</contextClassLoaderOutput>
            </configuration>
            <goals>
              <goal>load</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
