<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2005 The Apache Software Foundation

    Licensed 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>
    <pomVersion>3</pomVersion>
    <extend>../project.xml</extend>
    <!-- ============== -->
    <!-- Identification -->
    <!-- ============== -->
    <name>JDO2 Technology Compatibility Kit</name>
    <artifactId>jdo2-tck</artifactId>
    <currentVersion>2.0-SNAPSHOT</currentVersion>
    <package>org.apache.jdo.tck</package>
    <shortDescription>Java Data Object 2.0 (JDO) TCK</shortDescription>
    <description>The Java Data Objects 2.0 (JDO) API is a standard interface-based Java model abstraction of persistence, developed as Java Specification Request JSR 243 under the auspices of the Java Community Process.

The JDO TCK is a test suite designed to test implementations of the Java Data Objects specification. In order to claim compatibility with JDO, an implementation must pass all relevant tests of the JDOTCK.

NOTE!! This project has a nonstandard structure. The source files are located in the test directory.  However the build treats this directory as the source directory.  There are no unit tests in this project.</description>
    <repository />
    <!-- ============ -->
    <!-- Dependencies -->
    <!-- ============ -->
    <dependencies>
        <dependency>
            <groupId>apache-jdo</groupId>
            <artifactId>jdo2-api</artifactId>
            <version>SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>apache-jdo</groupId>
            <artifactId>jdo2-enhancer</artifactId>
            <version>SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>apache-jdo</groupId>
            <artifactId>jdo2-core</artifactId>
            <version>SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>jpox</groupId>
            <artifactId>jpox</artifactId>
            <version>SNAPSHOT</version>
            <url>http://www.jpox.org/docs/download.html</url>
        </dependency>
        <dependency>
            <groupId>jpox</groupId>
            <artifactId>jpox-enhancer</artifactId>
            <version>SNAPSHOT</version>
            <url>http://www.jpox.org/docs/download.html</url>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbytools</artifactId>
            <version>10.1.1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>bcel</groupId>
            <artifactId>bcel</artifactId>
            <version>5.1</version>
            <url>http://jakarta.apache.org/bcel/</url>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>
        <dependency>
            <groupId>geronimo-spec</groupId>
            <artifactId>geronimo-spec-jta</artifactId>
            <version>1.0.1B-rc2</version>
        </dependency>
        <dependency>
            <groupId>springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!-- dependencies for connection pooling -->
        <dependency>
            <groupId>jpox</groupId>
            <artifactId>jpox-c3p0</artifactId>
            <version>SNAPSHOT</version>
            <url>http://www.jpox.org/docs/download.html</url>
        </dependency>
        <dependency>
            <groupId>jpox</groupId>
            <artifactId>jpox-dbcp</artifactId>
            <version>SNAPSHOT</version>
            <url>http://www.jpox.org/docs/download.html</url>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.0</version>
            <url>http://prdownloads.sourceforge.net/c3p0/c3p0-0.9.0.bin.zip?use_mirror=unc</url>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.1</version>
        </dependency>
    </dependencies>
    <!-- =================== -->
    <!-- Build Specification -->
    <!-- =================== -->
    <build>
        <sourceDirectory>test/java</sourceDirectory>
        <resources>
            <resource>
                <directory>${basedir}/test/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <resources>
            <resource>
                <directory>${basedir}/test/conf</directory>
                <includes>
                    <include>enhancement-test.properties</include>
                    <include>commons-logging.properties</include>
                    <include>simplelog.properties</include>
                    <include>logging.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

