<?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">

    <parent>
        <groupId>org.apache.stratos</groupId>
        <artifactId>stratos-parent</artifactId>
        <version>4.0.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>stratos-features-parent</artifactId>
    <packaging>pom</packaging>
    <name>Apache Stratos - Features Aggregator Module</name>
    <url>http://apache.org</url>

    <modules>
        <!-- Load Balancer -->
        <module>load-balancer</module>
        <!-- Auto-Scaler -->
        <module>autoscaler</module>
        <!-- Coud Controller -->
        <module>cloud-controller</module>
        <!-- Manager -->
        <module>manager</module>
        <!-- Messaging -->
        <module>messaging</module>
    </modules>

    <build>
        <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-resources-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <properties>
        <wso2carbon.version>4.2.0</wso2carbon.version>
	<!--carbon.patch.version.4.1.1>4.1.1</carbon.patch.version.4.1.1-->
	<carbon.p2.plugin.version>1.5.3</carbon.p2.plugin.version>
	<synapse.wso2.version>2.1.1-wso2v4</synapse.wso2.version>        
	<google.guava.wso2.version>12.0.0.wso2v1</google.guava.wso2.version>
	<google.guice.wso2.version>3.0.wso2v1</google.guice.wso2.version>
	<com.google.guice.assistedinject.wso2.version>3.0.wso2v1</com.google.guice.assistedinject.wso2.version>
	<com.google.guice.assistedinject.wso2.version>3.0.wso2v1</com.google.guice.assistedinject.wso2.version>
	<sun.jersey.version>1.12</sun.jersey.version>
	<gson2.version>2.2</gson2.version>
	<google.collect.osgi.version>1.0.0.wso2v2</google.collect.osgi.version>
	<axis2.wso2.version>1.6.1.wso2v10</axis2.wso2.version>
	<axiom.wso2.version>1.2.11.wso2v4</axiom.wso2.version>
    </properties>

</project>
