<?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>
	<properties>
		<metamodel.version>5.0-SNAPSHOT</metamodel.version>
	</properties>
	<parent>
		<groupId>org.apache.metamodel</groupId>
		<artifactId>MetaModel</artifactId>
		<version>5.0-SNAPSHOT</version>
	</parent>
	<scm>
		<url>https://git-wip-us.apache.org/repos/asf?p=metamodel-membrane.git</url>
		<connection>scm:git:http://git-wip-us.apache.org/repos/asf/metamodel-membrane.git</connection>
		<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/metamodel-membrane.git</developerConnection>
		<tag>HEAD</tag>
	</scm>
	<groupId>org.apache.metamodel.membrane</groupId>
	<artifactId>Membrane-parent</artifactId>
	<version>0.1-SNAPSHOT</version>
	<name>MetaModel Membrane</name>
	<description>Data Federation as a RESTful service.</description>
	<url>http://metamodel.apache.org</url>
	<inceptionYear>2017</inceptionYear>
	<packaging>pom</packaging>
	<modules>
		<module>core</module>
		<module>war</module>
		<module>undertow</module>
	</modules>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.apache.metamodel</groupId>
				<artifactId>MetaModel-core</artifactId>
				<version>${metamodel.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.metamodel</groupId>
				<artifactId>MetaModel-spring</artifactId>
				<version>${metamodel.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.metamodel</groupId>
				<artifactId>MetaModel-full</artifactId>
				<version>${metamodel.version}</version>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>javax.servlet-api</artifactId>
				<version>3.1.0</version>
				<scope>provided</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
</project>
