<?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>
    <artifactId>maven-scm</artifactId>
    <groupId>org.apache.maven.scm</groupId>
    <version>1.8</version>
  </parent>

  <artifactId>maven-scm-providers</artifactId>
  <packaging>pom</packaging>

  <name>Maven SCM Providers</name>
  <description>Parent for all SCM providers supported.</description>

  <modules>
    <module>maven-scm-provider-accurev</module>
    <module>maven-scm-provider-bazaar</module>
    <module>maven-scm-provider-clearcase</module>
    <module>maven-scm-providers-cvs</module>
    <module>maven-scm-provider-hg</module>
    <module>maven-scm-providers-git</module>
    <module>maven-scm-provider-local</module>
    <module>maven-scm-provider-perforce</module>
    <module>maven-scm-providers-standard</module>
    <module>maven-scm-provider-starteam</module>
    <module>maven-scm-providers-svn</module>
    <module>maven-scm-provider-synergy</module>
    <module>maven-scm-provider-vss</module>
    <module>maven-scm-provider-tfs</module>
    <module>maven-scm-provider-integrity</module>
    <module>maven-scm-provider-jazz</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>regexp</groupId>
        <artifactId>regexp</artifactId>
        <version>1.3</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>default</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>**/*TckTest.java</exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>  
    <profile>
      <id>tck</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>**/*Test*.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>  
  </profiles>
</project>
