<?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.metamodel</groupId>
		<artifactId>MetaModel</artifactId>
		<version>5.2.0</version>
	</parent>
	<properties>
		<metamodel.version>5.2.0</metamodel.version>
	</properties>
	<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.2-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>

	<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 undertow build without Newman -->
			<id>minimal</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>
