<?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.7.0-SNAPSHOT</version>
  </parent>
  
  <groupId>org.apache.jclouds.labs</groupId>
  <artifactId>jclouds-labs-openstack</artifactId>
  <version>1.7.0-SNAPSHOT</version>
  <name>Apache jclouds labs openstack</name>
  <packaging>pom</packaging>

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

  <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>
  </repositories>

  <modules>
    <module>openstack-glance</module>
    <module>openstack-neutron</module>
    <module>openstack-trove</module>
    <module>openstack-swift</module>
    <module>openstack-marconi</module>
    <module>rackspace-clouddatabases-us</module>
    <module>rackspace-clouddatabases-uk</module>
    <module>rackspace-autoscale</module>
    <module>rackspace-autoscale-us</module>
    <module>rackspace-cloudqueues-us</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>com.mycila.maven-license-plugin</groupId>
        <artifactId>maven-license-plugin</artifactId>
        <version>1.9.0</version>
        <configuration>
          <strictCheck>true</strictCheck>
          <encoding>${sourceEncoding}</encoding>
          <aggregate>true</aggregate>
          <header>header.txt</header>
          <keywords>
            <keyword>Licensed</keyword>
          </keywords>
          <mapping>
                <xml>XML_STYLE</xml>
                <java>SLASHSTAR_STYLE</java>
                <clj>SEMICOLON_STYLE</clj>
          </mapping>
          <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/**/*.iso</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>

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

            <!-- one-line service registry files -->
            <exclude>**/*ProviderMetadata</exclude>
            <exclude>**/*ApiMetadata</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>

            <!-- Temporary files generated on CloudBees slaves -->
            <exclude>.repository/**</exclude>
            <exclude>gc.log</exclude>
          </excludes>
          <useDefaultExcludes>false</useDefaultExcludes>
        </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>
