<?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.2.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>https://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>3.5.6</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>
