<?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.it0104</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Maven Integration Test :: it0104</name>
  <description>
    Verify that plugin configurations are interpolated correctly.
  </description>

  <organization>
    <name>Apache</name>
  </organization>
  <url>http://maven.apache.org</url>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.its.plugins</groupId>
          <artifactId>maven-it-plugin-configuration</artifactId>
          <version>2.1-SNAPSHOT</version>
          <configuration>
            <propertiesFile>${project.build.directory}/config.properties</propertiesFile>
            <stringParam>${project.build.directory}</stringParam>
            <mapParam>
              <buildDir>${project.build.directory}</buildDir>
            </mapParam>
            <propertiesParam>
              <property>
                <name>buildDir</name>
                <value>${project.build.directory}</value>
              </property>
            </propertiesParam>
            <domParam>
              <basedir>${basedir}</basedir>
              <modelVersion>${project.modelVersion}</modelVersion>
              <name>${project.name}</name>
              <groupId>${project.groupId}</groupId>
              <description>${project.description}</description>
              <packaging>${project.packaging}</packaging>
              <version>${project.version}</version>
              <url>${project.url}</url>
              <organization>
                <name>${project.organization.name}</name>
              </organization>
              <build>
                <directory>${project.build.directory}</directory>
                <outputDirectory>${project.build.outputDirectory}</outputDirectory>
              </build>
            </domParam>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>config</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-configuration</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
