<?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.mng1895</groupId>
  <artifactId>test</artifactId>
  <version>0.1</version>
  <packaging>jar</packaging>

  <name>Maven Integration Test :: MNG-1895</name>
  <description>
    Verify that for a dependency being referenced in two different scopes, the scope given directly in the POM
    always wins, even if weaker than the scope of the transitive dependency.
  </description>

  <dependencies>
    <!--
    test
    +- a:provided
    +- b:runtime
    +- c:test
    \- d:compile
       +- a:compile
       +- b:compile
       \- c:compile
    -->
    <dependency>
      <groupId>org.apache.maven.its.mng1895</groupId>
      <artifactId>a</artifactId>
      <version>0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng1895</groupId>
      <artifactId>b</artifactId>
      <version>0.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng1895</groupId>
      <artifactId>c</artifactId>
      <version>0.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its.mng1895</groupId>
      <artifactId>d</artifactId>
      <version>0.1</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-dependency-resolution</artifactId>
        <version>2.1-SNAPSHOT</version>
        <configuration>
          <compileClassPath>target/compile.txt</compileClassPath>
          <runtimeClassPath>target/runtime.txt</runtimeClassPath>
          <testClassPath>target/test.txt</testClassPath>
          <significantPathLevels>1</significantPathLevels>
        </configuration>
        <executions>
          <execution>
            <id>resolve</id>
            <phase>validate</phase>
            <goals>
              <goal>compile</goal>
              <goal>runtime</goal>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
