<?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.0.1</version>
	</parent>

	<artifactId>org.apache.aries.cdi.executable</artifactId>
	<name>Apache Aries CDI - Executable JAR</name>
	<description>
		A full fledged executable JAR containing Aries CDI and several other
		useful features. Deploy your CDI bundles directly into this runtime.
	</description>

	<licenses>
		<license>
			<name>ASL 2.0</name>
			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
		</license>
	</licenses>

	<scm>
		<connection>scm:svn:https://svn.apache.org/repos/asf/aries/tags/org.apache.aries.cdi-1.0.1/cdi-executable</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/tags/org.apache.aries.cdi-1.0.1/cdi-executable</developerConnection>
		<url>https://svn.apache.org/viewvc/aries/tags/org.apache.aries.cdi-1.0.1/cdi-executable</url>
	</scm>

	<properties>
		<gpg.skip>true</gpg.skip>
		<maven.deploy.skip>true</maven.deploy.skip>
		<maven.install.skip>true</maven.install.skip>
		<maven.javadoc.skip>true</maven.javadoc.skip>
		<maven.source.skip>true</maven.source.skip>

		<executable.name>executable</executable.name>
	</properties>

	<dependencies>
		<!-- Provided by the Aries CDI BOM -->
		<dependency>
			<groupId>javax.ejb</groupId>
			<artifactId>javax.ejb-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.cdi</groupId>
			<artifactId>org.apache.aries.cdi.extender</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.cdi</groupId>
			<artifactId>org.apache.aries.cdi.extension.http</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.cdi</groupId>
			<artifactId>org.apache.aries.cdi.extra</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.spifly</groupId>
			<artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-el_2.2_spec</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.logging</groupId>
			<artifactId>jboss-logging</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
		</dependency>

		<!-- Additional runtime requirements -->
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.configadmin</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.gogo.command</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.gogo.runtime</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.gogo.shell</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.http.jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.logback</artifactId>
		</dependency>
		<dependency>
			<groupId>org.eclipse.platform</groupId>
			<artifactId>org.eclipse.osgi</artifactId>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.apache.aries.cdi</groupId>
				<artifactId>org.apache.aries.cdi.bom</artifactId>
				<version>${project.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.felix</groupId>
				<artifactId>org.apache.felix.gogo.bom</artifactId>
				<version>1.0.2</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-resolver-maven-plugin</artifactId>
				<configuration>
					<bndruns>
						<bndrun>${executable.name}.bndrun</bndrun>
					</bndruns>
				</configuration>
			</plugin>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-export-maven-plugin</artifactId>
				<configuration>
					<bndruns>
						<bndrun>${executable.name}.bndrun</bndrun>
					</bndruns>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>