<?xml version="1.0"?>
<!--
   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>42</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>commons-dbcp2</artifactId>
  <version>2.2.0</version>
  <name>Apache Commons DBCP</name>

  <inceptionYear>2001</inceptionYear>
  <description>Apache Commons DBCP software implements Database Connection Pooling</description>
  <url>http://commons.apache.org/dbcp/</url>

  <!-- Maven 3.0 needed for scmpublish 1.0 -->
  <prerequisites>
    <maven>3.0</maven>
  </prerequisites>

  <distributionManagement>
    <!-- Cannot define in parent ATM, see COMMONSSITE-26 -->
    <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-dbcp/</url>
    </site>
  </distributionManagement>

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

  <scm>
    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/commons-dbcp.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/commons-dbcp.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=commons-dbcp.git</url>
  </scm>

  <developers>
    <developer>
      <name>Morgan Delagrange</name>
      <id>morgand</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>Geir Magnusson</name>
      <id>geirm</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>Craig McClanahan</name>
      <id>craigmcc</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>John McNally</name>
      <id>jmcnally</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>Martin Poeschl</name>
      <id>mpoeschl</id>
      <email>mpoeschl@marmot.at</email>
      <organization>tucana.at</organization>
    </developer>
    <developer>
      <name>Rodney Waldhoff</name>
      <id>rwaldhoff</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>David Weinrich</name>
      <id>dweinr1</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>Dirk Verbeeck</name>
      <id>dirkv</id>
      <email></email>
      <organization></organization>
    </developer>
    <developer>
      <name>Yoav Shapira</name>
      <id>yoavs</id>
      <email>yoavs@apache.org</email>
      <organization>The Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>J&#x00f6;rg Schaible</name>
      <id>joehni</id>
      <email>joerg.schaible@gmx.de</email>
      <organization></organization>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <name>Mark Thomas</name>
      <id>markt</id>
      <email>markt@apache.org</email>
      <organization>The Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Gary Gregory</name>
      <id>ggregory</id>
      <email>ggregory@apache.org</email>
      <organization>The Apache Software Foundation</organization>
    </developer>
  </developers>
  <contributors>
    <contributor>
      <name>Todd Carmichael</name>
      <email>toddc@concur.com</email>
    </contributor>
    <contributor>
      <name>Wayne Woodfield</name>
    </contributor>
    <contributor>
      <name>Dain Sundstrom</name>
      <email>dain@apache.org</email>
    </contributor>
    <contributor>
      <name>Philippe Mouawad</name>
    </contributor>
  </contributors>

  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>${commons.pool.version}</version>
    </dependency>

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

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

    <!-- For managed connections -->
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jta_1.1_spec</artifactId>
       <version>1.1.1</version>
       <optional>true</optional>
    </dependency>

    <!-- tomcat naming jars for jndi reference tests -->
    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>naming-common</artifactId>
      <version>5.0.28</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>naming-java</artifactId>
      <version>5.0.28</version>
      <scope>test</scope>
    </dependency>

    <!-- for testing of managed connections -->
    <dependency>
      <groupId>org.apache.geronimo.modules</groupId>
      <artifactId>geronimo-transaction</artifactId>
       <!--
       Cannot update this currently; anything later causes failures:
       java.lang.NoClassDefFoundError:
       Could not initialize class org.apache.geronimo.transaction.manager.TransactionManagerImpl
        -->
       <version>1.2-beta</version>
       <scope>test</scope>
       <exclusions>
         <exclusion>
           <artifactId>junit</artifactId>
           <groupId>junit</groupId>
         </exclusion>
         <exclusion>
           <artifactId>commons-logging</artifactId>
           <groupId>commons-logging</groupId>
         </exclusion>
       </exclusions>
    </dependency>
  </dependencies>

  <properties>
    <project.build.sourceEncoding>UTF-8</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>
    <commons.componentid>dbcp2</commons.componentid>
    <commons.module.name>org.apache.commons.dbcp2</commons.module.name>
    <commons.release.version>2.2</commons.release.version>
    <commons.release.desc>for JDBC 4.1 (Java 7.0+)</commons.release.desc>
    <commons.release.2.version>1.4</commons.release.2.version>
    <commons.release.2.desc>for JDBC 4 (Java 6.0)</commons.release.2.desc>
    <!-- override parent name, because 1.x uses different artifactId -->
    <commons.release.2.name>commons-dbcp-${commons.release.2.version}</commons.release.2.name>
    <commons.release.3.version>1.3</commons.release.3.version>
    <commons.release.3.desc>for JDBC 3 (Java 1.4 or 5)</commons.release.3.desc>
    <!-- override parent name, because 1.x uses different artifactId -->
    <commons.release.3.name>commons-dbcp-${commons.release.3.version}</commons.release.3.name>
    <commons.site.path>dbcp</commons.site.path>
    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-dbcp</commons.scmPubUrl>
    <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
    <commons.jira.id>DBCP</commons.jira.id>
    <commons.jira.pid>12310469</commons.jira.pid>
    <!-- Override CP version until that is updated -->
    <!-- Version 1.0 requires Maven 3.0 or later -->
    <commons.scm-publish.version>1.1</commons.scm-publish.version>
    <commons.checkstyle.version>2.11</commons.checkstyle.version>
    <!-- Constant for Commons Pool version (used in multiple places) -->
    <commons.pool.version>2.5.0</commons.pool.version>
    <!-- See DBCP-445 and DBCP-454 -->
    <commons.osgi.import>javax.transaction;version="1.1.0",javax.transaction.xa;version="1.1.0";partial=true;mandatory:=partial,*</commons.osgi.import>

    <!-- Temporary fix to support Java 8 and 9 -->
    <commons.jacoco.version>0.7.9</commons.jacoco.version>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <version>${commons.scm-publish.version}</version>
          <configuration>
            <ignorePathsToDelete>
              <ignorePathToDelete>javadocs</ignorePathToDelete>
            </ignorePathsToDelete>
          </configuration>
        </plugin>
        <!-- Allow use of "mvn checkstyle:checkstyle" -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${commons.checkstyle.version}</version>
          <configuration>
            <configLocation>${basedir}/checkstyle.xml</configLocation>
            <enableRulesSummary>false</enableRulesSummary>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
            <systemPropertyVariables>
                <!-- Ensure that logging messages can be inspected -->
                <org.apache.commons.logging.Log>org.apache.commons.dbcp2.StackMessageLog</org.apache.commons.logging.Log>
            </systemPropertyVariables>
            <reportFormat>plain</reportFormat>
              <excludes>
                <!-- Test support files -->
                <exclude>**/Tester*.java</exclude>
                <!-- Exclude nested classes which Surefire cannot handle -->
                <exclude>**/Test*$*.java</exclude>
              </excludes>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <descriptors>
              <descriptor>src/main/assembly/bin.xml</descriptor>
              <descriptor>src/main/assembly/src-tar-gz.xml</descriptor>
              <descriptor>src/main/assembly/src-zip.xml</descriptor>
            </descriptors>
            <tarLongFileMode>gnu</tarLongFileMode>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <configuration>
            <ignorePathsToDelete>
              <ignorePathToDelete>api-*</ignorePathToDelete>
            </ignorePathsToDelete>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${commons.javadoc.version}</version>
          <configuration>
            <links>
              <link>http://docs.oracle.com/javase/7/docs/api</link>
              <link>http://commons.apache.org/proper/commons-pool/api-${commons.pool.version}</link>
              <link>http://docs.oracle.com/javaee/7/api/</link>
            </links>
          </configuration>
        </plugin>
      </plugins>
    </build>
    <reporting>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <version>3.0.5</version>
          <configuration>
            <threshold>Normal</threshold>
            <effort>Default</effort>
            <excludeFilterFile>${basedir}/findbugs-exclude-filter.xml</excludeFilterFile>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${commons.javadoc.version}</version>
          <configuration>
            <links>
              <link>http://docs.oracle.com/javase/7/docs/api</link>
              <link>http://commons.apache.org/proper/commons-pool/api-${commons.pool.version}</link>
              <link>http://docs.oracle.com/javaee/7/api/</link>
            </links>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changes-plugin</artifactId>
          <version>${commons.changes.version}</version>
          <configuration>
            <template>release-notes.vm</template>
            <templateDirectory>src/changes</templateDirectory>
            <!-- Limit this to released, supported versions else there are -->
            <!-- to many issues in the report                              -->
            <fixVersionIds>12313721,12326766,12328750</fixVersionIds>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${commons.checkstyle.version}</version>
          <configuration>
            <configLocation>${basedir}/checkstyle.xml</configLocation>
            <enableRulesSummary>false</enableRulesSummary>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>clirr-maven-plugin</artifactId>
          <version>${commons.clirr.version}</version>
          <configuration>
            <minSeverity>info</minSeverity>
          </configuration>
        </plugin>
      </plugins>
    </reporting>
</project>
