<?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.core</groupId>
		<artifactId>causeway-core</artifactId>
		<version>2.0.0-RC1</version>
		<relativePath>../../core/pom.xml</relativePath>
	</parent>

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

	<name>Apache Causeway Persistence - JDO</name>
	<description>
		Supplementary applib for JDO persistence
    </description>

	<packaging>pom</packaging>

	<modules>
		<module>applib</module>
		
		<module>integration</module>
		<module>metamodel</module>
		<module>spring</module>
		<module>provider</module>
		<module>datanucleus</module>
		
	</modules>

</project>