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


        Copyright (C) 2010 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>
        <groupId>org.jclouds</groupId>
        <artifactId>jclouds-project</artifactId>
        <version>1.0-beta-9e-SNAPSHOT</version>
        <relativePath>../../project/pom.xml</relativePath>
    </parent>
    <groupId>org.jclouds.api</groupId>
    <artifactId>vcloudexpress</artifactId>
    <name>jcloud vcloudexpress api</name>
    <description>jclouds components to access an implementation of VMWare vCloud Express</description>

    <properties>
        <!-- when instances are hung, open a ticket and add here -->
        <jclouds.compute.blacklist-nodes>trmkrun-ccc,test.trmk-924</jclouds.compute.blacklist-nodes>
        <test.vcloudexpress.endpoint>FIXME</test.vcloudexpress.endpoint>
        <test.vcloudexpress.apiversion>1.0</test.vcloudexpress.apiversion>
        <test.vcloudexpress.identity>FIXME</test.vcloudexpress.identity>
        <test.vcloudexpress.credential>FIXME</test.vcloudexpress.credential>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.jclouds.common</groupId>
            <artifactId>vcloud-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jclouds.common</groupId>
            <artifactId>vcloud-common</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jclouds</groupId>
            <artifactId>jclouds-core</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jclouds</groupId>
            <artifactId>jclouds-compute</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jclouds</groupId>
            <artifactId>jclouds-compute</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jclouds.driver</groupId>
            <artifactId>jclouds-jsch</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.16</version>
           <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jclouds.driver</groupId>
            <artifactId>jclouds-log4j</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jamesmurty.utils</groupId>
            <artifactId>java-xmlbuilder</artifactId>
            <version>0.3</version>
        </dependency>
        <dependency>
            <groupId>org.jclouds</groupId>
            <artifactId>jclouds-core</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>live</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>integration</id>
                                <phase>integration-test</phase>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <systemProperties>
                                        <property>
                                            <name>test.vcloudexpress.endpoint</name>
                                            <value>${test.vcloudexpress.endpoint}</value>
                                        </property>
                                        <property>
                                            <name>test.vcloudexpress.apiversion</name>
                                            <value>${test.vcloudexpress.apiversion}</value>
                                        </property>
                                        <property>
                                            <name>test.vcloudexpress.identity</name>
                                            <value>${test.vcloudexpress.identity}</value>
                                        </property>
                                        <property>
                                            <name>test.vcloudexpress.credential</name>
                                            <value>${test.vcloudexpress.credential}</value>
                                        </property>
                                        <property>
                                            <name>jclouds.compute.blacklist-nodes</name>
                                            <value>${jclouds.compute.blacklist-nodes}</value>
                                        </property>
                                    </systemProperties>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>
