<?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">
  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-parent</artifactId>
    <version>43</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>commons-testing-parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Apache Commons Testing Parent POM</name>

  <inceptionYear>2017</inceptionYear>
  <description>
    Apache Commons Testing, a package of Java utility classes for testing.
  </description>

  <url>https://commons.apache.org/proper/commons-testing/</url>

  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/TESTING</url>
  </issueManagement>

  <scm>
    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/commons-testing.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/commons-testing.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=commons-testing.git</url>
    <tag>TESTING-1.0.0</tag>
  </scm>

  <developers>
    <developer>
      <name>Gary Gregory</name>
      <id>ggregory</id>
      <email>ggregory@apache.org</email>
      <timezone>-5</timezone>
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>
  </developers>

  <contributors>
  </contributors>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit4.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>${mongodb3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>bson</artifactId>
        <version>${mongodb3.version}</version>
      </dependency>
      <dependency>
        <groupId>de.flapdoodle.embed</groupId>
        <artifactId>de.flapdoodle.embed.mongo</artifactId>
        <version>${embed.mongodb}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <name>Apache Commons Testing Site</name>
      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-testing/</url>
    </site>
  </distributionManagement>

  <properties>
    <argLine>-Xmx512m</argLine>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <!--
      This is also used to generate download_xxx file name.
      To override this when generating the download page:

      mvn commons:download-page -Dcommons.componentid=testing

      The above seems to change the download page name but not any other
      properties that depend on the componentid.
    -->
    <commons.componentid>testing</commons.componentid>
    <commons.module.name>org.apache.commons.testing</commons.module.name>
    <!-- Current 1.x release series -->
    <commons.release.version>1.0.0</commons.release.version>
    <commons.release.desc>(Java 7)</commons.release.desc>
    <commons.jira.id>TESTING</commons.jira.id>
    <commons.jira.pid>????</commons.jira.pid>

    <commons.site.path>testing</commons.site.path>
    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-testing</commons.scmPubUrl>
    <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
    <commons.encoding>utf-8</commons.encoding>

    <!-- Plugin versions -->
    <commons.clirr.version>2.8</commons.clirr.version>
    <checkstyle.plugin.version>3.0.0</checkstyle.plugin.version>
    <findbugs.plugin.version>3.0.5</findbugs.plugin.version>
    <embed.mongodb>2.0.1</embed.mongodb>

    <!-- Component versions -->
    <mongodb2.version>2.14.3</mongodb2.version>
    <mongodb3.version>3.6.1</mongodb3.version>
    <junit4.version>4.12</junit4.version>
    <commons-io.version>2.6</commons-io.version>
    <commons-lang.version>3.7</commons-lang.version>
  </properties>


  <build>
    <defaultGoal>clean verify apache-rat:check clirr:check checkstyle:check findbugs:check javadoc:javadoc</defaultGoal>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>site-content/**</exclude>
            </excludes>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <executions>
            <execution>
              <id>plain</id>
              <configuration>
                <includes>
                  <include>**/*Test.java</include>
                </includes>
                <runOrder>random</runOrder>
              </configuration>
            </execution>
            <!-- <execution> <id>security-manager-test</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals>
              <configuration>
              <includes> <include>**/*Test.java</include> </includes> <argLine>-Djava.security.manager -Djava.security.policy=${basedir}/src/test/resources/java.policy</argLine>
              </configuration> </execution> -->
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <descriptors>
              <descriptor>src/assembly/bin.xml</descriptor>
              <descriptor>src/assembly/src.xml</descriptor>
            </descriptors>
            <tarLongFileMode>gnu</tarLongFileMode>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <configuration>
            <ignorePathsToDelete>
              <ignorePathToDelete>javadocs</ignorePathToDelete>
            </ignorePathsToDelete>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${checkstyle.plugin.version}</version>
          <configuration>
            <configLocation>${basedir}/checkstyle.xml</configLocation>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
            <enableRulesSummary>false</enableRulesSummary>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <!-- Use version from parent pom as that is adjusted according to the Java version used to run Maven -->
          <version>${commons.findbugs.version}</version>
          <configuration>
            <excludeFilterFile>${basedir}/findbugs-exclude-filter.xml</excludeFilterFile>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
    </plugins>

  </build>

  <reporting>
    <plugins>
      <!-- Requires setting 'export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m" ' -->
      <plugin>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.9.0</version>
        <configuration>
          <targetJdk>${maven.compiler.target}</targetJdk>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>taglist-maven-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <tagListOptions>
            <tagClasses>
              <tagClass>
                <displayName>Needs Work</displayName>
                <tags>
                  <tag>
                    <matchString>TODO</matchString>
                    <matchType>exact</matchType>
                  </tag>
                  <tag>
                    <matchString>FIXME</matchString>
                    <matchType>exact</matchType>
                  </tag>
                  <tag>
                    <matchString>XXX</matchString>
                    <matchType>exact</matchType>
                  </tag>
                </tags>
              </tagClass>
              <tagClass>
                <displayName>Noteable Markers</displayName>
                <tags>
                  <tag>
                    <matchString>NOTE</matchString>
                    <matchType>exact</matchType>
                  </tag>
                  <tag>
                    <matchString>NOPMD</matchString>
                    <matchType>exact</matchType>
                  </tag>
                  <tag>
                    <matchString>NOSONAR</matchString>
                    <matchType>exact</matchType>
                  </tag>
                </tags>
              </tagClass>
            </tagClasses>
          </tagListOptions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>javancss-maven-plugin</artifactId>
        <version>2.1</version>
      </plugin>
    </plugins>
  </reporting>

  <modules>
    <module>commons-testing-generic</module>
    <module>commons-testing-junit4</module>
    <!--<module>commons-testing-junit5</module> -->
    <module>commons-testing-junit4-mongodb</module>
  </modules>

  <profiles>
    <profile>
      <id>java9</id>
      <activation>
        <jdk>9</jdk>
      </activation>
      <properties>
        <!-- LANG-1265: allow tests to access private fields/methods of java.base classes via reflection -->
        <argLine>-Xmx512m --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens
          java.base/java.lang=ALL-UNNAMED</argLine>
        <!-- versions below 3.0.0 do not work with java 9 -->
        <commons.javadoc.version>3.0.0</commons.javadoc.version>
        <!-- coverall version 4.3.0 does not work with java 9, see https://github.com/trautonen/coveralls-maven-plugin/issues/112 -->
        <coveralls.skip>true</coveralls.skip>
      </properties>
    </profile>

  </profiles>

</project>
