<?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.samples</groupId>
        <artifactId>samples</artifactId>
        <version>0.2-incubating-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.aries.samples.blueprint</groupId>
    <artifactId>blueprint</artifactId>
    <name>Apache Aries Blueprint samples</name>
    <packaging>pom</packaging>
    <description>Samples demonstrating the Apache Aries Blueprint implementation</description>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.aries.samples.blueprint</groupId>
                <artifactId>helloworld</artifactId>
                <version>${version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.aries.samples.blueprint</groupId>
                <artifactId>idverifier</artifactId>
                <version>${version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <module>helloworld</module> 
        <module>idverifier</module> 
    </modules>
</project>
