<?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.mng4318</groupId>
  <artifactId>root</artifactId>
  <version>0.1</version>
  <packaging>pom</packaging>

  <name>Maven Integration Test :: MNG-4318</name>
  <description>
    Verify that MavenProject.isExecutionRoot() is properly set within a reactor.
  </description>

  <modules>
    <module>sub-1</module>
    <module>sub-2</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-expression</artifactId>
        <version>2.1-SNAPSHOT</version>
        <configuration>
          <outputFile>target/project.properties</outputFile>
          <expressions>
            <expression>project/executionRoot</expression>
            <expression>project/parent/executionRoot</expression>
            <expression>project/parent/parent/executionRoot</expression>
          </expressions>
        </configuration>
        <executions>
          <execution>
            <id>test</id>
            <phase>validate</phase>
            <goals>
              <goal>eval</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
