<?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-RC4</metamodel.version>
	</properties>
	<parent>
		<groupId>org.apache.metamodel</groupId>
		<artifactId>MetaModel</artifactId>
		<version>5.0-RC4</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>

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