<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  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>
    <!-- ====================================================================== -->
    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
    <!-- ====================================================================== -->
    <id>tck-candidate</id>
    <name>Jackrabbit TCK test candidate Web Application</name>
    <currentVersion>1.0</currentVersion>


    <!-- ====================================================================== -->
    <!-- D E P E N D E N C I E S                                                -->
    <!-- ====================================================================== -->
    <dependencies>

        <!-- dependencies from jackrabbit that we want to bundle -->
        <dependency>
            <groupId>concurrent</groupId>
            <artifactId>concurrent</artifactId>
            <version>1.3.4</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.1</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>lucene</groupId>
            <artifactId>lucene</artifactId>
            <version>1.4.3</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.6.2</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.8</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

        <!-- jcr -->    
        <dependency>
            <groupId>jsr170</groupId>
            <artifactId>jcr</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- dependencies from jcr that we want to bundle -->
        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-core</artifactId>
            <version>1.0</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.1.1.0</version>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

    
        <!-- own dependencies (build only) -->
        <dependency>
            <groupId>servletapi</groupId>
            <artifactId>servletapi</artifactId>
            <version>2.3</version>
        </dependency>
    
     </dependencies>

    <!-- ====================================================================== -->
    <!-- B U I L D  D E S C R I P T I O N                                       -->
    <!-- ====================================================================== -->
    <build>
        <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.txt</include>
                    <include>**/*.xsd</include>
                    <include>**/*.properties</include>
                    <include>**/*.dtd</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
