<?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.brooklyn</groupId>
        <artifactId>brooklyn-parent</artifactId>
        <version>0.9.0</version>  <!-- BROOKLYN_VERSION -->
        <relativePath>../brooklyn-server/parent/</relativePath>
    </parent>

    <groupId>org.apache.brooklyn</groupId>
    <artifactId>brooklyn-library</artifactId>
    <version>0.9.0</version>  <!-- BROOKLYN_VERSION -->
    <packaging>pom</packaging>

    <name>Brooklyn Library Root</name>
    <description>
        Brooklyn Library project root, serving as the ancestor POM for all projects --
        declaring versions, profiles, and the modules to build
    </description>
    <url>https://brooklyn.apache.org/</url>
    <inceptionYear>2012</inceptionYear>

    <developers>
        <!-- TODO update with PMC members and committers -->
    </developers>

    <scm>
        <connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-brooklyn.git</developerConnection>
        <url>https://git-wip-us.apache.org/repos/asf?p=incubator-brooklyn.git</url>
        <tag>HEAD</tag>
    </scm>

    <issueManagement>
        <system>JIRA</system>
        <url>https://issues.apache.org/jira/browse/BROOKLYN</url>
    </issueManagement>
    <ciManagement>
        <system>Jenkins</system>
        <url>https://builds.apache.org/job/incubator-brooklyn-master-build/</url>
    </ciManagement>
    <mailingLists>
        <mailingList>
            <name>Brooklyn Developer List</name>
            <subscribe>dev-subscribe@brooklyn.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@brooklyn.apache.org</unsubscribe>
            <post>dev@brooklyn.apache.org</post>
            <archive>
                http://mail-archives.apache.org/mod_mbox/brooklyn-dev/
            </archive>
        </mailingList>
    </mailingLists>

    <properties>
    
		<!-- Versions of Software we Blueprint -->
        <qpid.version>0.20</qpid.version>
        <mongodb.version>3.0.3</mongodb.version>
        <riak.version>1.4.0</riak.version>
        <hazelcast.version>3.5.4</hazelcast.version>
        <org.marre.smsj.version>1.0.0-20051126</org.marre.smsj.version>
        <mysql-connector-java.version>5.1.18</mysql-connector-java.version>
        <hadoop.version>1.0.2</hadoop.version>
        <postgresql.version>9.1-901.jdbc4</postgresql.version>
        <activemq.version>5.10.0</activemq.version>
        <rabbitmq-version>2.8.7</rabbitmq-version>
        <kafka.version>0.8.2.1</kafka.version>
        <storm.version>0.9.0.1</storm.version>
        <redis.version>1.5.2</redis.version>
        
    </properties>

    <modules>

        <!-- <module>sandbox/cassandra-multicloud-snitch</module> -->
        <!-- <module>sandbox/database</module> -->
        <!-- <module>sandbox/examples/simple-open-loop-policy</module> -->
        <!-- <module>sandbox/extra</module> -->
        <!-- <module>sandbox/mobile-app</module> -->
        <!-- <module>sandbox/monitoring</module> -->
        <!-- <module>sandbox/nosql</module> -->
        <!-- <module>sandbox/web-acceptance</module> -->

        <module>software/cm</module>
        <module>software/network</module>
        <module>software/osgi</module>
        <module>software/database</module>
        <module>software/webapp</module>
        <module>software/messaging</module>
        <module>software/nosql</module>
        <module>software/monitoring</module>

        <module>qa</module>
        
        <module>examples</module>

    </modules>

</project>
