<?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.felix</groupId>
		<artifactId>dependencymanager-reactor</artifactId>
		<version>3.0.0-SNAPSHOT</version>
	</parent>

	<name>Apache Felix Dependency Manager Runtime</name>
	<artifactId>org.apache.felix.dependencymanager.runtime</artifactId>
	<packaging>bundle</packaging>

	<dependencies>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.compendium</artifactId>
		</dependency>
		
		<dependency>
			<groupId>${pom.groupId}</groupId>
			<artifactId>org.apache.felix.dependencymanager</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>org.apache.felix.dependencymanager.runtime</Bundle-SymbolicName>
						<Bundle-Name>Apache Felix Dependency Manager Runtime</Bundle-Name>
						<Bundle-Description>A bundle that loads components descriptors from started bundles</Bundle-Description>
						<Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
						<Private-Package>org.apache.felix.dm.runtime.*</Private-Package>
						<Import-Package>org.apache.felix.dm;version="[3.0.0,4.0.0)",*</Import-Package>
						<Embed-Dependency>json</Embed-Dependency>
						<Bundle-Activator>org.apache.felix.dm.runtime.Activator</Bundle-Activator>
						<Include-Resource>META-INF/LICENSE=LICENSE,META-INF/NOTICE=NOTICE,META-INF/DEPENDENCIES=DEPENDENCIES</Include-Resource> 
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
