<?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 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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>fulcrum-security</artifactId>
        <groupId>org.apache.fulcrum</groupId>
        <version>1.1.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.fulcrum</groupId>
    <artifactId>fulcrum-security-hibernate</artifactId>
    <version>1.1.0</version>
    <name>Fulcrum Security Hibernate Impl</name>
    <description>
      Fulcrum Security Hibernate Impl is an implementation of the Fulcrum Security API
      that uses Hibernate as a database backend.
    </description>
    <url>http://turbine.apache.org/fulcrum/fulcrum-security/fulcrum-security-hibernate/</url>
    <scm>
      <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-security-1.1.0/hibernate</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-security-1.1.0/hibernate</developerConnection>
      <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-security-1.1.0/hibernate</url>
    </scm>

    <build>
        <sourceDirectory>${basedir}/src/java/</sourceDirectory>
        <testSourceDirectory>${basedir}/src/test/</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>${basedir}/src/test</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <forkMode>perTest</forkMode>
                    <includes>
                        <include>**/*Test.*</include>
                        <include>**/*TestCase.*</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-security-api</artifactId>
            <version>1.1.0</version>
        </dependency>
    
        <!-- Needed for the Hibernate SPI -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.7.Final</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>     
           
        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-security-api</artifactId>
            <version>1.1.0</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>1.8.0.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-testcontainer</artifactId>
            <version>1.0.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-yaafi</artifactId>
            <version>1.0.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
        	<groupId>org.slf4j</groupId>
        	<artifactId>slf4j-log4j12</artifactId>
        	<version>1.6.1</version>
        	<type>jar</type>
        	<scope>test</scope>
        </dependency>
        <dependency>
        	<groupId>log4j</groupId>
        	<artifactId>log4j</artifactId>
        	<version>1.2.16</version>
        	<type>jar</type>
        	<scope>test</scope>
        </dependency>
    </dependencies>
</project>
