<?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</groupId>
        <artifactId>apache</artifactId>
        <version>17</version>
    </parent>

    <groupId>org.apache.brooklyn</groupId>
    <artifactId>brooklyn</artifactId>
    <version>0.8.1-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
    <packaging>pom</packaging>

    <name>Brooklyn Root</name>
    <description>
        Brooklyn project root, serving as the ancestor POM for all projects --
        declaring versions, profiles, and the modules to build
    </description>
    <url>https://brooklyn.incubator.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 Incubator Developer List</name>
            <subscribe>dev-subscribe@brooklyn.incubator.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@brooklyn.incubator.apache.org</unsubscribe>
            <post>dev@brooklyn.incubator.apache.org</post>
            <archive>
                http://mail-archives.apache.org/mod_mbox/incubator-brooklyn-dev/
            </archive>
        </mailingList>
    </mailingLists>

    <properties>
        <!-- Compilation -->
        <java.version>1.7</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <brooklyn.version>0.8.1-SNAPSHOT</brooklyn.version>  <!-- BROOKLYN_VERSION -->
    </properties>

    <modules>
        <module>parent</module>
        <module>usage/downstream-parent</module>

        <module>api</module>
        <module>camp</module>
        <module>core</module>
        <module>examples</module>
        <module>policy</module>

        <module>locations/jclouds</module>

        <!-- 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/base</module>
        <module>software/network</module>
        <module>software/osgi</module>
        <module>software/webapp</module>
        <module>software/messaging</module>
        <module>software/nosql</module>
        <module>software/database</module>
        <module>software/monitoring</module>

        <module>storage/hazelcast</module>

        <module>usage/all</module>
        <module>usage/archetypes/quickstart</module>
        <module>usage/camp</module>
        <module>usage/cli</module>
        <module>usage/dist</module>
        <module>usage/jsgui</module>
        <module>usage/launcher</module>
        <module>usage/logback-includes</module>
        <module>usage/logback-xml</module>
        <module>usage/qa</module>
        <module>usage/rest-api</module>
        <module>usage/rest-client</module>
        <module>usage/rest-server</module>
        <module>usage/test-support</module>

        <module>utils/common</module>
        <module>utils/groovy</module>
        <module>utils/jmx/jmxmp-ssl-agent</module>
        <module>utils/jmx/jmxrmi-agent</module>
        <module>utils/test-support</module>
        <module>utils/rest-swagger</module>
    </modules>

</project>
