<?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</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>
	<packaging>pom</packaging>

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

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

	<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.6</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-resolver-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>owb-resolve</id>
						<phase>package</phase>
						<goals>
							<goal>resolve</goal>
						</goals>
						<configuration>
							<bndruns>
								<bndrun>owb-executable.bndrun</bndrun>
							</bndruns>
						</configuration>
					</execution>
					<execution>
						<id>weld-resolve</id>
						<phase>package</phase>
						<goals>
							<goal>resolve</goal>
						</goals>
						<configuration>
							<bndruns>
								<bndrun>weld-executable.bndrun</bndrun>
							</bndruns>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-export-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>owb-export</id>
						<goals>
							<goal>export</goal>
						</goals>
						<configuration>
							<bndruns>
								<bndrun>owb-executable.bndrun</bndrun>
							</bndruns>
						</configuration>
					</execution>
					<execution>
						<id>weld-export</id>
						<goals>
							<goal>export</goal>
						</goals>
						<configuration>
							<bndruns>
								<bndrun>weld-executable.bndrun</bndrun>
							</bndruns>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-run-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>owb-executable</id>
						<configuration>
							<bndrun>owb-executable.bndrun</bndrun>
						</configuration>
					</execution>
					<execution>
						<id>weld-executable</id>
						<configuration>
							<bndrun>weld-executable.bndrun</bndrun>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-baseline-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>baseline</id>
						<phase>none</phase>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<artifactId>maven-install-plugin</artifactId>
				<executions>
					<execution>
						<id>default-install</id>
						<phase>none</phase>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<artifactId>maven-deploy-plugin</artifactId>
				<executions>
					<execution>
						<id>default-deploy</id>
						<phase>none</phase>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<artifactId>maven-gpg-plugin</artifactId>
				<executions>
					<execution>
						<id>default-deploy</id>
						<phase>none</phase>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>