<?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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.jclouds</groupId>
    <artifactId>jclouds-project</artifactId>
    <version>1.9.3</version>
  </parent>
  <groupId>org.apache.jclouds.labs</groupId>
  <artifactId>jclouds-labs</artifactId>
  <version>1.9.3</version>
  <packaging>pom</packaging>
  <name>Apache jclouds labs</name>

  <scm>
    <connection>scm:git:https://git-wip-us.apache.org/repos/asf/jclouds-labs.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/jclouds-labs.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=jclouds-labs.git</url>
    <tag>rel/jclouds-labs-1.9.3-rc1</tag>
  </scm>

  <properties>
    <jclouds.version>1.9.3</jclouds.version>
  </properties>

  <repositories>
    <repository>
      <id>apache-snapshots</id>
      <url>https://repository.apache.org/content/repositories/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>sonatype-nexus-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <modules>
    <module>azurecompute</module>
    <module>docker</module>
    <module>cdmi</module>
    <module>cloudsigma2</module>
    <module>cloudsigma2-hnl</module>
    <module>cloudsigma2-lvs</module>
    <module>cloudsigma2-mia</module>
    <module>cloudsigma2-sjc</module>
    <module>cloudsigma2-wdc</module>
    <module>cloudsigma2-zrh</module>
    <module>digitalocean</module>
    <module>digitalocean2</module>
    <module>joyent-cloudapi</module>
    <module>joyentcloud</module>
    <module>abiquo</module>
    <module>profitbricks</module>
    <module>shipyard</module>
    <module>oauth</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <excludes>
            <!-- expectation files for unit tests -->
            <exclude>**/src/test/resources/**/*.sh</exclude>
            <exclude>**/src/test/resources/**/*.bat</exclude>
            <exclude>**/src/test/resources/**/*.cmd</exclude>
            <exclude>**/src/test/resources/**/*.txt</exclude>
            <exclude>**/src/test/resources/**/*.gz</exclude>
            <exclude>**/src/test/resources/**/*.xml</exclude>
            <exclude>**/src/test/resources/**/*.html</exclude>
            <exclude>**/src/test/resources/**/*.iso</exclude>
            <exclude>**/src/test/resources/**/ssh*.pub</exclude>            
            
            <!-- prevent duplicating license -->
            <exclude>**/LICENSE.txt</exclude>
            <exclude>**/header.txt</exclude>

            <!-- high-level project metadata -->
            <exclude>**/NOTICE.txt</exclude>
            <exclude>**/DISCLAIMER</exclude>
            <exclude>**/BUILD.txt</exclude>
            <exclude>**/CHANGES.txt</exclude>
            <exclude>**/README.md</exclude>
            <exclude>**/README.txt</exclude>
            <exclude>**/DEPENDENCIES</exclude>
            <exclude>**/CONTRIBUTING.md</exclude>

            <!-- reference data lists -->
            <exclude>**/*json</exclude>
            <exclude>**/*readme</exclude>

            <!-- one-line service registry files -->
            <exclude>**/*ProviderMetadata</exclude>
            <exclude>**/*ApiMetadata</exclude>
            <exclude>**/*LoggingModule</exclude>
            <exclude>**/*ViewMBeanFactory</exclude>

            <!-- temporary files or those generated by IDE or SCM -->
            <exclude>**/target/**</exclude>
            <exclude>**/test-output/**</exclude>
            <exclude>**/bin/**</exclude>
            <exclude>**/.settings/**</exclude>
            <exclude>**/.classpath</exclude>
            <exclude>**/.dir-locals.el</exclude>
            <exclude>**/.project</exclude>
            <exclude>**/.idea/**</exclude>
            <exclude>**/*.iml</exclude>
            <exclude>**/*.eml</exclude>
            <exclude>**/*.ipr</exclude>
            <exclude>**/*.iws</exclude>
            <exclude>**/*.DS_STORE</exclude>
            <exclude>**/TAGS</exclude>
            <exclude>**/.metadata/**</exclude>
            <exclude>**/atlassian-ide-plugin.xml</exclude>
            <exclude>**/.DS_Store</exclude>
            <exclude>.mailmap</exclude>
            <exclude>.git/**</exclude>
            <exclude>**/.gitignore</exclude>
            <exclude>**/.gitattributes</exclude>
            <exclude>.repository/**</exclude>
            <exclude>.java-version</exclude>
            <exclude>nb-configuration.xml</exclude>
            <exclude>nbactions.xml</exclude>
            <exclude>**/.factorypath</exclude>
            <exclude>**/.apt_generated/**</exclude>

            <!-- Temporary files generated on CloudBees slaves -->
            <exclude>.repository/**</exclude>
            <exclude>gc.log</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>doc</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>javadoc</id>
                <phase>package</phase>
                <goals>
                  <goal>aggregate-jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

