<?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.activemq</groupId>
    <artifactId>activemq-parent</artifactId>
    <version>5.4-SNAPSHOT</version>
  </parent>

  <artifactId>activemq-blueprint</artifactId>
  <packaging>bundle</packaging>
  <name>ActiveMQ :: Blueprint</name>
  <description>The ActiveMQ Message Broker and Client implementations</description>

  <properties>
    <activemq.osgi.import.pkg>
		org.apache.xbean*;version="[3.7,4)",
      	*
    </activemq.osgi.import.pkg>
  </properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.aries.blueprint</groupId>
			<artifactId>org.apache.aries.blueprint</artifactId>
			<version>${aries-version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xbean</groupId>
			<artifactId>xbean-blueprint</artifactId>
			<version>${xbean-version}</version>
		</dependency>
	</dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
			<!--Fragment-Host>org.apache.activemq.activemq-core;version=[$(version;==;${activemq.osgi.version}),$(version;=+;${activemq.osgi.version}))</Fragment-Host-->
			<Fragment-Host>org.apache.activemq.activemq-core</Fragment-Host>
          </instructions>
        </configuration>
      </plugin>
	<plugin>
		<artifactId>maven-resources-plugin</artifactId>
		<version>2.3</version>
	</plugin>
	<plugin>
		<artifactId>maven-install-plugin</artifactId>
		<version>2.2</version>
	</plugin>
    </plugins>
  </build>

</project>
