<?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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.empire-db</groupId>
		<artifactId>empire-db-examples</artifactId>
		<version>2.4.4</version>
	</parent>
	<artifactId>empire-db-example-spring</artifactId>
	<name>Apache Empire-db Spring Example</name>
	<description>Examples showing the use of empire-db with Spring.</description>

    <properties>
        <spring.version>3.0.5.RELEASE</spring.version>
    </properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.empire-db</groupId>
			<artifactId>empire-db</artifactId>
		</dependency>
		<!-- use log4j for logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</dependency>
		<!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>
		
		<!-- This dependency should be declared as runtime but the exec plugin is broken atm... -->
		<dependency>
		    <groupId>hsqldb</groupId>
		    <artifactId>hsqldb</artifactId>
		    <!-- <scope>runtime</scope> -->
		</dependency> 
		<dependency>
		    <groupId>postgresql</groupId>
		    <artifactId>postgresql</artifactId>
		    <version>8.3-603.jdbc3</version>
		    <!-- <scope>runtime</scope> -->
		</dependency> 
		<dependency>
		    <groupId>com.h2database</groupId>
		    <artifactId>h2</artifactId>
		    <!-- <scope>runtime</scope> -->
		</dependency> 
		<dependency>
		    <groupId>org.apache.derby</groupId>
		    <artifactId>derby</artifactId>
		    <!-- <scope>runtime</scope> -->
		</dependency> 

		<!-- ojdbc   
		<dependency>
		    <groupId>com.oracle</groupId>
			<artifactId>ojdbc5</artifactId>
			<version>11.2.0.3</version>
		</dependency>
		-->

		<!-- msssql  
		<dependency>
		    <groupId>com.microsoft</groupId>
		    <artifactId>sqljdbc</artifactId>
		    <version>1.0</version>
		</dependency>
		-->
		
	</dependencies>

    <!-- better would be to add this repository in your settings.xml -->
    <repositories>
    	<repository>
		    <id>spring-milestone</id>
		    <name>Spring Portfolio Milestone Repository</name>
		    <url>http://s3.amazonaws.com/maven.springframework.org/milestone</url>
		</repository>
    </repositories>

	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>1.1.1</version>
				<configuration>
					<!-- <classpathScope>runtime</classpathScope> -->
					<mainClass>org.apache.empire.samples.spring.SampleSpringApp</mainClass>		
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
