<?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>1.0.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
        <relativePath>../brooklyn-server/parent/</relativePath>
    </parent>

    <artifactId>brooklyn-library</artifactId>
    <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/brooklyn-library.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/brooklyn-library.git</developerConnection>
        <url>https://git-wip-us.apache.org/repos/asf?p=brooklyn-library.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/view/Brooklyn/job/brooklyn-library-master/</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>

    <repositories>
        <!--
            Same as in the parent apache pom. Repeated here in case
            direct parent's pom not found at relativePath. Can't fetch
            the parent from remote repos for snapshot versions - no
            snapshot repos enabled by default.
        -->
        <repository>
            <id>apache.snapshots</id>
            <name>Apache Snapshot Repository</name>
            <url>http://repository.apache.org/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>

    <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>catalog-aliases</module>

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

        <module>karaf</module>
    </modules>

</project>
