<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.aries.blueprint</groupId>
        <artifactId>blueprint-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../blueprint-parent/pom.xml</relativePath>
    </parent>

    <groupId>org.apache.aries.blueprint</groupId>
    <artifactId>blueprint-repository</artifactId>
    <name>Apache Aries Blueprint Repository</name>
    <version>1.5.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <bnd.version>3.1.0</bnd.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <local.index.policy>ALLOWED</local.index.policy>

        <blueprint.api.version>1.0.1</blueprint.api.version>
        <blueprint.core.version>1.5.0</blueprint.core.version>
        <blueprint.cm.version>1.0.9</blueprint.cm.version>
    </properties>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <blueprint.api.version>${blueprint.api.dev.version}</blueprint.api.version>
                <blueprint.core.version>${blueprint.core.dev.version}</blueprint.core.version>
                <blueprint.cm.version>${blueprint.cm.dev.version}</blueprint.cm.version>
                <blueprint.parser.version>${blueprint.parser.dev.version}</blueprint.parser.version>
                <blueprint.authz.version>${blueprint.authz.dev.version}</blueprint.authz.version>
                <blueprint.spring.version>${blueprint.spring.dev.version}</blueprint.spring.version>
                <blueprint.spring.extender.version>${blueprint.spring.extender.dev.version}</blueprint.spring.extender.version>
                <blueprint.jexl.evaluator.version>${blueprint.jexl.evaluator.dev.version}</blueprint.jexl.evaluator.version>
                <blueprint.sample.version>${blueprint.sample.dev.version}</blueprint.sample.version>
                <blueprint.sample.fragment.version>${blueprint.sample.fragment.dev.version}</blueprint.sample.fragment.version>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>biz.aQute.bnd</groupId>
                <artifactId>bnd-indexer-maven-plugin</artifactId>
                <version>${bnd.version}</version>
                <configuration>
                    <localURLs>${local.index.policy}</localURLs>
                    <includeTransitive>true</includeTransitive>
                </configuration>
                <executions>
                    <execution>
                        <id>index</id>
                        <goals>
                            <goal>index</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
	<dependencies>
        <!--  Aries PROXY -->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-all</artifactId>
            <version>5.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.aries</groupId>
            <artifactId>org.apache.aries.util</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.aries.proxy</groupId>
            <artifactId>org.apache.aries.proxy.api</artifactId>
            <version>1.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.aries.proxy</groupId>
            <artifactId>org.apache.aries.proxy.impl</artifactId>
            <version>1.0.6</version>
        </dependency>

        <!-- blueprint -->	
		<dependency>
			<groupId>org.apache.aries.blueprint</groupId>
			<artifactId>org.apache.aries.blueprint.api</artifactId>
			<version>${blueprint.api.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.blueprint</groupId>
			<artifactId>org.apache.aries.blueprint.core</artifactId>
			<version>${blueprint.core.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.aries.blueprint</groupId>
			<artifactId>org.apache.aries.blueprint.cm</artifactId>
			<version>${blueprint.cm.version}</version>
		</dependency>
	</dependencies>
</project>
