<?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>
    <pomVersion>3</pomVersion>
    <extend>../project.xml</extend>
    <!-- ============== -->
    <!-- Identification -->
    <!-- ============== -->
    <name>JDO2 API Legacy</name>
    <groupId>javax.jdo</groupId>
    <artifactId>jdo2-api-legacy</artifactId>
    <currentVersion>2.1</currentVersion>
    <package>javax.jdo</package>
    <shortDescription>Java Data Objects 2.1 (JDO) API legacy</shortDescription>
    <description>The Java Data Objects 2.1 (JDO) API is a standard interface-based 
Java model abstraction of persistence, developed as Java Specification 
Request 243 under the auspices of the Java Community Process.
This version requires only JDK 1.3.</description>
    <!-- ============ -->
    <!-- Dependencies -->
    <!-- ============ -->
    <dependencies>
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>transaction-api</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</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>
            <resources>
                <resource>
                <directory>${basedir}/test/schema</directory>
                <includes>
                    <include>**/*.jdo</include>
                    <include>**/*.jdoquery</include>
                    <include>**/*.orm</include>
                    <include>**/jdoconfig.xml</include>
                </includes>
                </resource>
            </resources>
        </unitTest>

        <defaultGoal>jar:install</defaultGoal>

        <!-- 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}/..</directory>
                <targetPath>META-INF</targetPath>
                <includes>
                    <include>NOTICE.txt</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}</directory>
                <includes>
                    <include>API2.MF</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/java</directory>
                <includes>
                    <include>javax/jdo/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/schema</directory>
                <includes>
                    <include>javax/jdo/*.dtd</include>
                    <include>javax/jdo/*.xsd</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

