<?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.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-parser</artifactId>
    <packaging>jar</packaging>
    <name>Apache Aries Blueprint Parser</name>
    <version>1.6.1</version>
    <description>
        This bundle contains the blueprint parser in a plain jar.
    </description>

    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/aries.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/aries.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=aries.git;a=summary</url>
      <tag>blueprint-parser-1.6.1</tag>
  </scm>

    <properties>
        <blueprint.api.version>1.0.0</blueprint.api.version>
        <lastReleaseVersion>1.4.0</lastReleaseVersion>
    </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>

    <dependencies>
        <dependency>
            <groupId>org.apache.aries.blueprint</groupId>
            <artifactId>org.apache.aries.blueprint.api</artifactId>
            <version>${blueprint.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.aries.versioning</groupId>
                <artifactId>org.apache.aries.versioning.plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>version-check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>
