<?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/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.chemistry.opencmis</groupId>
		<artifactId>chemistry-opencmis</artifactId>
		<version>0.10.0</version>
		<relativePath>../../pom.xml</relativePath>
	</parent>

	<artifactId>chemistry-opencmis-osgi-server</artifactId>
	<name>OpenCMIS OSGi Server Wrapper</name>

	<packaging>bundle</packaging>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>2.0.1</version>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Embed-Dependency>
							*;scope=compile,runtime;inline=false
						</Embed-Dependency>
						<Embed-Transitive>false</Embed-Transitive>
						<Import-Package>
							!org.apache.chemistry.opencmis.client.bindings;version=${project.version},
							!antlr.collections.impl,
							!org.antlr.*,
							org.slf4j;resolution:=optional,
							org.slf4j.impl;resolution:=optional,
							org.apache.avalon.framework.logger;resolution:=optional,
							org.apache.log;resolution:=optional,
							com.sun.xml.ws.*;resolution:=optional,
							joptsimple;resolution:=optional,
							org.apache.commons.lang.*;version="[2.5.0,3.0)";resolution:=optional,
							*
						</Import-Package>
						<_exportcontents>
							org.apache.chemistry.opencmis.commons.impl.*;version=${project.version};-noimport:=true,
							org.apache.chemistry.opencmis.commons.*;version=${project.version};-noimport:=true,
							org.apache.chemistry.opencmis.server.shared.*;version=${project.version};-noimport:=true,
							org.apache.chemistry.opencmis.server.impl.*;version=${project.version};-noimport:=true,
							org.apache.chemistry.opencmis.inmemory.server.*;version=${project.version};-noimport:=true,
							com.sun.xml.ws.*;version="[2.1.7,3.0)";resolution:=optional
						</_exportcontents>
						<Embed-Directory>lib</Embed-Directory>
						<Bundle-DocURL>${project.url}</Bundle-DocURL>
						<Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-commons-api</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-commons-impl</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-server-support</artifactId>
			<version>${project.version}</version>
		</dependency>
        <dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-server-bindings</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-server-inmemory</artifactId>
			<version>${project.version}</version>
            <classifier>classes</classifier>
            <type>jar</type>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>chemistry-opencmis-test-util</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>antlr-runtime</artifactId>
			<version>3.2</version>
		</dependency>
	</dependencies>

</project>