<?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.causeway.persistence</groupId>
		<artifactId>causeway-persistence-jdo</artifactId>
		<version>2.0.0-RC3</version>
	</parent>

	<artifactId>causeway-persistence-jdo-datanucleus</artifactId>

	<name>Apache Causeway Persistence - JDO Provider (DataNucleus)</name>
	<description>
        JDO Implementation (powered by DataNucleus)
    </description>

	<properties>
		<jar-plugin.automaticModuleName>org.apache.causeway.persistence.jdo.datanucleus</jar-plugin.automaticModuleName>
		<git-plugin.propertiesDir>org/apache/causeway/persistence/jdo/datanucleus</git-plugin.propertiesDir>
	</properties>

	<dependencies>

		<dependency>
			<groupId>org.apache.causeway.persistence</groupId>
			<artifactId>causeway-persistence-jdo-integration</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.persistence</groupId>
			<artifactId>causeway-persistence-jdo-provider</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.core</groupId>
			<artifactId>causeway-core-runtime</artifactId>
		</dependency>

		<dependency>
			<groupId>org.datanucleus</groupId>
			<artifactId>datanucleus-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.datanucleus</groupId>
			<artifactId>datanucleus-api-jdo</artifactId>
		</dependency>
		<dependency>
			<groupId>org.datanucleus</groupId>
			<artifactId>datanucleus-jdo-query</artifactId>
		</dependency>
		<dependency>
			<groupId>org.datanucleus</groupId>
			<artifactId>datanucleus-rdbms</artifactId>
		</dependency>
		<dependency>
			<groupId>org.datanucleus</groupId>
			<artifactId>datanucleus-jodatime</artifactId>
		</dependency>


		<!-- not required by the JDO integration modules, but enables 
			Spring Boot DataSource Auto-configuration -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<scope>runtime</scope>
			<exclusions>
				<exclusion>
					<!-- we use log4j-2 instead -->
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- TESTING -->

		<dependency>
			<groupId>org.apache.causeway.core</groupId>
			<artifactId>causeway-core-internaltestsupport</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>test</scope>
		</dependency>


	</dependencies>


</project>
