<?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>JDO1 API</name>
    <artifactId>jdo1-api</artifactId>
    <currentVersion>1.1</currentVersion>
    <package>javax.jdo</package>
    <shortDescription>Java Data Object (JDO) API</shortDescription>
    <description>The Java Data Objects (JDO) API is a standard interface-based 
Java model abstraction of persistence, developed as Java Specification 
Request 12 under the auspices of the Java Community Process.</description>
    <repository />
    <!-- ============ -->
    <!-- Dependencies -->
    <!-- ============ -->
    <dependencies>
        <dependency>
            <groupId>geronimo-spec</groupId>
            <artifactId>geronimo-spec-jta</artifactId>
            <version>1.0.1B-rc2</version>
        </dependency>
    </dependencies>
    <!-- =================== -->
    <!-- Build Specification -->
    <!-- =================== -->
    <build>
        <sourceDirectory>src/java</sourceDirectory>
        <unitTestSourceDirectory>test/java</unitTestSourceDirectory>
        <!-- Unit test cases -->
        <unitTest>
            <includes>
                <include>**/*Test.java</include>
            </includes>
            <excludes>
                <exclude>javax/jdo/util/AbstractTest.java</exclude>
                <exclude>javax/jdo/pc/*.java</exclude>
            </excludes>
        </unitTest>
        <!-- J A R  R E S O U R C E S -->
        <!-- Resources that are packaged up inside the JAR file -->
        <resources>
            <resource>
                <directory>${basedir}/src/java</directory>
                <includes>
                    <include>javax/jdo/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/dtd</directory>
                <includes>
                    <include>javax/jdo/*.dtd</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

