<?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.5.1-SNAPSHOT</version>
	</parent>
	<artifactId>empire-db-example-basic</artifactId>
	<name>Apache Empire-db Basic Example</name>
	<description>Examples showing the use of empire-db.</description>
	<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>

		<!-- 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> 
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>5.1.6</version>
		</dependency>
		<!-- msssql -->
		<dependency>
		    <groupId>com.microsoft.sqlserver</groupId>
		    <artifactId>mssql-jdbc</artifactId>
		    <version>7.0.0.jre8</version>
		</dependency>
		<!-- ojdbc 
		<dependency>
		    <groupId>com.oracle</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.3.0</version>
		</dependency>
		-->  
		
	</dependencies>
	<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.db.SampleApp</mainClass>		
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
