<?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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.maven.its.mng3877</groupId>
  <artifactId>mng3877</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <name>Maven Integration Test :: MNG-3877</name>
  <description>
    Verify that project directories are basedir aligned when inspected by plugins.
  </description>

  <build>
    <!--
    NOTE: Deliberately re-specify default paths to decouple from super POM and interpolation. Proper handling of
    *relative* paths is the whole point of this test.
    -->
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
    </testResources>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <filters>
      <filter>src/main/filters/it.properties</filter>
    </filters>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-expression</artifactId>
        <version>2.1-SNAPSHOT</version>
        <configuration>
          <outputFile>target/model.properties</outputFile>
          <expressions>
            <expression>project/build/directory</expression>
            <expression>project/build/outputDirectory</expression>
            <expression>project/build/testOutputDirectory</expression>
            <expression>project/build/sourceDirectory</expression>
            <expression>project/build/testSourceDirectory</expression>
            <expression>project/build/scriptSourceDirectory</expression>
            <expression>project/build/resources/0/directory</expression>
            <expression>project/build/testResources/0/directory</expression>
            <expression>project/build/filters/0</expression>
            <expression>project/reporting/outputDirectory</expression>
            <expression>project/compileSourceRoots</expression>
            <expression>project/testCompileSourceRoots</expression>
            <expression>project/scriptSourceRoots</expression>
          </expressions>
        </configuration>
        <executions>
          <execution>
            <id>effective-model</id>
            <phase>validate</phase>
            <goals>
              <goal>eval</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <!--
    NOTE: Deliberately re-specify default paths to decouple from super POM and interpolation. Proper handling of
    *relative* paths is the whole point of this test.
    -->
    <outputDirectory>target/site</outputDirectory>
  </reporting>
</project>
