<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.maven.its</groupId>
    <artifactId>core-it-support</artifactId>
    <version>2.1-SNAPSHOT</version>
  </parent>

  <groupId>org.apache.maven.its.plugins</groupId>
  <artifactId>maven-it-plugins</artifactId>
  <packaging>pom</packaging>

  <name>Maven IT :: Plugins</name>
  <description>Maven Integration Tests Plugins, to completely decouple ITs from production plugins.</description>

  <modules>
    <module>maven-it-plugin-active-collection</module>
    <module>maven-it-plugin-ant-based</module>
    <module>maven-it-plugin-artifact</module>
    <module>maven-it-plugin-class-loader</module>
    <module>maven-it-plugin-configuration</module>
    <module>maven-it-plugin-context-passing</module>
    <module>maven-it-plugin-core-stubs</module>
    <module>maven-it-plugin-dependency-collection</module>
    <module>maven-it-plugin-dependency-resolution</module>
    <module>maven-it-plugin-expression</module>
    <module>maven-it-plugin-error</module>
    <module>maven-it-plugin-extension-consumer</module>
    <module>maven-it-plugin-extension-provider</module>
    <module>maven-it-plugin-fork</module>
    <module>maven-it-plugin-invalid-descriptor</module>
    <module>maven-it-plugin-log-file</module>
    <module>maven-it-plugin-model-interpolation</module>
    <module>maven-it-plugin-no-default-comp</module>
    <module>maven-it-plugin-no-project</module>
    <module>maven-it-plugin-online</module>
    <module>maven-it-plugin-optional-mojos</module>
    <module>maven-it-plugin-packaging</module>
    <module>maven-it-plugin-parameter-implementation</module>
    <module>maven-it-plugin-plugin-dependency</module>
    <module>maven-it-plugin-project</module>
    <module>maven-it-plugin-project-interpolation</module>
    <module>maven-it-plugin-setter</module>
    <module>maven-it-plugin-singleton-component</module>
    <module>maven-it-plugin-site</module>
    <module>maven-it-plugin-toolchain</module>
    <module>maven-it-plugin-touch</module>
    <module>maven-it-plugin-uses-properties</module>
    <module>maven-it-plugin-uses-wagon</module>
    <module>maven-it-plugin-all</module>
    <module>maven-it-plugin-plexus-utils-11</module>
    <module>maven-it-plugin-plexus-utils-new</module>
    <module>maven-it-plugin-plexus-component-api</module>
    <module>maven-it-plugin-log4j</module>
    <module>maven-it-plugin-extension1</module>
    <module>maven-it-plugin-extension2</module>
    <module>maven-it-plugin-plexus-lifecycle</module>
    <module>maven-it-plugin-settings</module>
    <module>mng5805-extension</module>
    <module>mng5805-extension2</module>
    <module>mng5805-plugin</module>
    <module>mng5805-plugin-dep</module>
    <module>mng5958-extension</module>
    <module>mng6759-plugin-resolves-project-dependencies</module>
  </modules>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/core-integration-testing/trunk/core-it-support/core-it-plugins</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/core-integration-testing/trunk/core-it-support/core-it-plugins</developerConnection>
    <url>http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-it-support/core-it-plugins</url>
  </scm>
  <distributionManagement>
    <repository>
      <id>maven.it</id>
      <name>Apache Maven IT Repository</name>
      <url>https://repository.apache.org/content/repositories/snapshots</url>
    </repository>
    <snapshotRepository>
      <id>maven.it</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
    </snapshotRepository>
  </distributionManagement>

  <properties>
    <distMgmtSnapshotsName>Apache Maven IT Snapshot Repository</distMgmtSnapshotsName>
    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>3.3</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.3</version>
      </plugin>
    </plugins>
  </reporting>
</project>
