<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Licensed 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/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.aries.cdi</groupId>
		<artifactId>org.apache.aries.cdi</artifactId>
		<version>1.1.4-SNAPSHOT</version>
	</parent>

	<artifactId>org.apache.aries.cdi.bom</artifactId>
	<packaging>pom</packaging>
	<name>Apache Aries CDI - BOM</name>
	<description>Bill Of Materials for Apache Aries CDI.</description>

	<scm>
		<connection>scm:git:git@github.com:apache/aries-cdi.git</connection>
		<developerConnection>scm:git:git@github.com:apache/aries-cdi.git</developerConnection>
		<tag>HEAD</tag>
		<url>https://github.com/apache/aries-cdi</url>
	</scm>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>biz.aQute.bnd.annotation</artifactId>
				<version>${bnd.version}</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extender</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.el.jsp</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.jaxrs</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.jndi</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.servlet.common</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.servlet.owb</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.servlet.weld</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extension.spi</artifactId>
				<version>${project.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.extra</artifactId>
				<version>${project.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.spi</artifactId>
				<version>${project.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.owb</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.weld</artifactId>
				<version>${project.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.jax.rs</groupId>
				<artifactId>org.apache.aries.jax.rs.whiteboard</artifactId>
				<version>${jax.rs.whiteboard.version}</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.aries.spifly</groupId>
				<artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
				<version>1.3.2</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.felix</groupId>
				<artifactId>org.apache.felix.configadmin</artifactId>
				<version>1.9.10</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.felix</groupId>
				<artifactId>org.apache.felix.http.jetty</artifactId>
				<version>4.0.14</version>
				<scope>runtime</scope>
				<exclusions>
					<exclusion>
						<groupId>javax.servlet</groupId>
						<artifactId>javax.servlet-api</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
			<dependency>
				<groupId>org.apache.felix</groupId>
				<artifactId>org.apache.felix.logback</artifactId>
				<version>1.0.2</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.eclipse.platform</groupId>
				<artifactId>org.eclipse.osgi</artifactId>
				<version>3.15.200</version>
				<scope>runtime</scope>
			</dependency>
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>log4j-over-slf4j</artifactId>
				<version>${slf4j.version}</version>
				<scope>runtime</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-baseline-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>baseline</id>
						<phase>none</phase>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

	<profiles>
		<profile>
			<id>experimental</id>
			<dependencyManagement>
				<dependencies>
					<dependency>
						<groupId>org.apache.aries.cdi</groupId>
						<artifactId>org.apache.aries.cdi.extension.mp-config</artifactId>
						<version>${project.version}</version>
						<scope>compile</scope>
					</dependency>
					<dependency>
						<groupId>org.apache.aries.cdi</groupId>
						<artifactId>org.apache.aries.cdi.extension.mp-jwt-auth</artifactId>
						<version>${project.version}</version>
						<scope>compile</scope>
					</dependency>
					<dependency>
						<groupId>org.apache.aries.cdi</groupId>
						<artifactId>org.apache.aries.cdi.extension.mp-metrics</artifactId>
						<version>${project.version}</version>
						<scope>compile</scope>
					</dependency>
					<dependency>
						<groupId>org.apache.johnzon</groupId>
						<artifactId>johnzon-osgi</artifactId>
						<version>${johnzon.version}</version>
						<scope>runtime</scope>
					</dependency>
				</dependencies>
			</dependencyManagement>
		</profile>
	</profiles>
</project>
