<?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.0</metamodel.version>
	</properties>
	<parent>
		<groupId>org.apache.metamodel</groupId>
		<artifactId>MetaModel</artifactId>
		<version>5.0.0</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>Membrane-parent-0.1</tag>
	</scm>
	<groupId>org.apache.metamodel.membrane</groupId>
	<artifactId>Membrane-parent</artifactId>
	<version>0.1</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>

	<profiles>
		<profile>
			<!-- Normal profile for a build on a machine without specific tools like Docker or Newman installed -->
			<id>normal</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<modules>
				<module>swagger-codegen</module>
				<module>core</module>
				<module>war</module>
				<module>undertow</module>
			</modules>
		</profile>
		<profile>
			<!-- Minimal profile for running just the docker image build -->
			<id>dockerbuild</id>
			<modules>
				<module>swagger-codegen</module>
				<module>core</module>
				<module>undertow</module>
			</modules>
		</profile>
		<profile>
			<!-- Build profile for running everything - requires docker and newman installed -->
			<id>full</id>
			<modules>
				<module>swagger-codegen</module>
				<module>core</module>
				<module>war</module>
				<module>undertow</module>
				<module>postman-tests</module>
			</modules>
		</profile>
	</profiles>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.rat</groupId>
					<artifactId>apache-rat-plugin</artifactId>
					<configuration>
						<licenses>
							<license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
								<licenseFamilyCategory>ASL20</licenseFamilyCategory>
								<licenseFamilyName>Apache Software License, 2.0</licenseFamilyName>
								<notes>Single licensed ASL v2.0</notes>
								<patterns>
									<pattern>Licensed to the Apache Software Foundation (ASF) under
										one
										or more contributor license agreements.</pattern>
								</patterns>
							</license>
						</licenses>
						<excludeSubProjects>false</excludeSubProjects>
						<excludes>
							<exclude>KEYS</exclude>
							<exclude>**/*.md</exclude>
							<exclude>**/*.json</exclude>
							<exclude>**/.gitignore/**</exclude>
							<exclude>.git/**</exclude>
							<exclude>.gitattributes</exclude>
							<exclude>**/.project</exclude>
							<exclude>**/.classpath</exclude>
							<exclude>**/.settings/**</exclude>
							<exclude>**/.vscode/**</exclude>
							<exclude>**/.travis.yml</exclude>
							<exclude>**/target/**</exclude>
							<exclude>**/*.iml/**</exclude>
							<exclude>**/*.iws/**</exclude>
							<exclude>**/*.ipr/**</exclude>
							<exclude>**/.idea/**</exclude>
						</excludes>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<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>
