<?xml version="1.0" encoding="UTF-8"?>
<!--


    Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>

    ====================================================================
    Licensed 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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>jclouds-aws-project</artifactId>
        <groupId>org.jclouds</groupId>
        <version>1.0-beta-5</version>
    </parent>
    <artifactId>jclouds-aws-extensions-project</artifactId>
    <packaging>pom</packaging>
    <name>jclouds AWS extensions aggregator</name>
    <modules>
        <module>jets3t</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jclouds-aws</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jclouds-blobstore</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>          
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jclouds-aws</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>          
    </dependencies>
</project>
