<?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>

  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-parent</artifactId>
    <version>51</version>
  </parent>

  <groupId>commons-validator</groupId>
  <artifactId>commons-validator</artifactId>
  <version>1.7</version>
  <name>Apache Commons Validator</name>
  <description>
    Apache Commons Validator provides the building blocks for both client side validation and server side data validation.
    It may be used standalone or with a framework like Struts.
  </description>
  <url>http://commons.apache.org/proper/commons-validator/</url>
  <inceptionYear>2002</inceptionYear>

  <properties>
    <commons.componentid>validator</commons.componentid>
    <commons.module.name>org.apache.commons.validator</commons.module.name>
    <!-- Re-generate the download page using: mvn commons:download-page -->
    <commons.release.version>1.7</commons.release.version>
    <commons.rc.version>RC2</commons.rc.version>
    <commons.release.desc>(requires JDK ${maven.compiler.target})</commons.release.desc>
    <commons.bc.version>1.6</commons.bc.version>
    <commons.jira.id>VALIDATOR</commons.jira.id>
    <commons.jira.pid>12310494</commons.jira.pid>
    <commons.encoding>UTF-8</commons.encoding>

    <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-validator</commons.scmPubUrl>

    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <commons.release.isDistModule>true</commons.release.isDistModule>
  </properties> 

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-validator</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-validator</developerConnection>
    <url>https://gitbox.apache.org/repos/asf/commons-validator</url>
  </scm>

  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/browse/VALIDATOR</url>
  </issueManagement>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <name>Apache Commons Site</name>
      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-validator/</url>
    </site>
  </distributionManagement>

  <build>
    <defaultGoal>clean verify apache-rat:check clirr:check checkstyle:check javadoc:javadoc</defaultGoal>
    <resources>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>NOTICE.txt</include>
          <include>LICENSE.txt</include>
        </includes>
       </resource>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>${basedir}/src/assembly/bin.xml</descriptor>
            <descriptor>${basedir}/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>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${commons.checkstyle-plugin.version}</version>
        <configuration>
          <configLocation>${basedir}/checkstyle.xml</configLocation>
          <!-- Needed to define config_loc -->
          <propertyExpansion>config_loc=${basedir}</propertyExpansion>
          <enableRulesSummary>false</enableRulesSummary>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-maven-plugin</artifactId>
        <version>${commons.spotbugs.version}</version>
      </plugin>
    </plugins>
  </build>

  <dependencies>

    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.4</version>
    </dependency>

    <dependency>
      <groupId>commons-digester</groupId>
      <artifactId>commons-digester</artifactId>
      <version>2.1</version>
      <!-- exclude older version and use declared-only -->
      <exclusions>
        <exclusion>
          <groupId>commons-beanutils</groupId>
          <artifactId>commons-beanutils</artifactId>
        </exclusion>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.2</version>
    </dependency>

    <!-- Needed for IBANValidatorTest -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-csv</artifactId>
      <!-- 1.6 needed for Java 7+ -->
      <version>1.6</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <!-- For testing DomainValidatorStartup -->
      <groupId>org.bitstrings.test</groupId>
      <artifactId>junit-clptr</artifactId>
      <version>1.2.2</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${commons.checkstyle-plugin.version}</version>
        <configuration>
          <configLocation>${basedir}/checkstyle.xml</configLocation>
          <!-- Needed to define config_loc -->
          <propertyExpansion>config_loc=${basedir}</propertyExpansion>
          <enableRulesSummary>false</enableRulesSummary>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>checkstyle</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${commons.cobertura.version}</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>clirr-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.13.0</version>
        <configuration>
          <targetJdk>${maven.compiler.target}</targetJdk>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>pmd</report>
              <report>cpd</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${commons.findbugs.version}</version>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
          <!--excludeFilterFile>${basedir}/findbugs-exclude-filter.xml</excludeFilterFile-->
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>site-content/**</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <profiles>
    <profile>
      <id>setup-checkout</id>
      <activation>
        <file>
          <missing>site-content</missing>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
              <execution>
                <id>prepare-checkout</id>
                <phase>pre-site</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <exec executable="svn">
                      <arg line="checkout --depth immediates ${commons.scmPubUrl} ${commons.scmPubCheckoutDirectory}" />
                    </exec>

                    <exec executable="svn">
                      <arg line="update --set-depth exclude ${commons.scmPubCheckoutDirectory}/javadocs" />
                    </exec>

                    <pathconvert pathsep=" " property="dirs">
                      <dirset dir="${commons.scmPubCheckoutDirectory}" includes="*" />
                    </pathconvert>
                    <exec executable="svn">
                      <arg line="update --set-depth infinity ${dirs}" />
                    </exec>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdk9-cldr</id>
      <activation>
        <jdk>[1.9,)</jdk>
      </activation>
      <!--
       Temporary fix to allow tests to work under Java 9+, which changed to use CLDR names.
       This causes several Date/Time tests to fail, as some language strings have changed.
       e.g. German now uses "Dez." rather than "Dez" for the short version of "December"
       (see: TimeValidatorTest#testTimeZone)
       Is the test data wrong, or should the code still be able to parse "Dez"?
      -->
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <systemPropertyVariables>
                    <java.locale.providers>COMPAT,CLDR</java.locale.providers>
                </systemPropertyVariables>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <developers>
    <developer>
      <name>Don Brown</name>
      <id>mrdon</id>
      <email>mrdon@apache.org</email>
    </developer>
    <developer>
      <name>Martin Cooper</name>
      <id>martinc</id>
      <email>martinc@apache.org</email>
    </developer>
    <developer>
      <name>David Graham</name>
      <id>dgraham</id>
      <email>dgraham@apache.org</email>
    </developer>
    <developer>
      <name>Ted Husted</name>
      <id>husted</id>
      <email>husted@apache.org</email>
    </developer>
    <developer>
      <name>Rob Leland</name>
      <id>rleland</id>
      <email>rleland at apache.org</email>
    </developer>
    <developer>
      <name>Craig McClanahan</name>
      <id>craigmcc</id>
      <email>craigmcc@apache.org</email>
    </developer>
    <developer>
      <name>James Mitchell</name>
      <id>jmitchell</id>
      <email>jmitchell NOSPAM apache.org</email>
      <organization>EdgeTech, Inc</organization>
    </developer>
    <developer>
      <name>Niall Pemberton</name>
      <id>niallp</id>
    </developer>
    <developer>
      <name>James Turner</name>
      <id>turner</id>
      <email>turner@apache.org</email>
    </developer>
    <developer>
      <name>David Winterfeldt</name>
      <id>dwinterfeldt</id>
      <email>dwinterfeldt@apache.org</email>
    </developer>
    <developer>
      <name>Henri Yandell</name>
      <id>bayard</id>
    </developer>
    <developer>
      <name>Ben Speakmon</name>
      <id>bspeakmon</id>
    </developer>
    <developer>
      <name>Nick Burch</name>
      <id>nick</id>
    </developer>
    <developer>
      <name>SimoneTripodi</name>
      <id>simonetripodi</id>
    </developer>
    <developer>
      <name>Benedikt Ritter</name>
      <id>britter</id>
    </developer>
    <developer>
      <name>Gary Gregory</name>
      <id>ggregory</id>
      <email>ggregory@apache.org</email>
      <url>http://www.garygregory.com</url>
      <timezone>-5</timezone>
    </developer>
  </developers>
  <contributors>
    <contributor>
      <name>Makoto Uchino</name>
    </contributor>
  </contributors>

</project>
