<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <description>Prototype for refactoring persistence of usergrid</description>

    <groupId>org.apache.usergrid</groupId>
    <artifactId>persistence</artifactId>
    <name>Usergrid Persistence</name>
    <packaging>pom</packaging>
    <version>2.1.0-SNAPSHOT</version>

  <profiles>
    <!-- better to have keep this sonar profile in your maven settings.xml -->
    <profile>
      <id>sonar</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <sonar.host.url>http://localhost:9000</sonar.host.url>
        <sonar.jdbc.url>jdbc:h2:tcp://localhost:9092/sonar</sonar.jdbc.url>
        <sonar.jdbc.username>sonar</sonar.jdbc.username>
        <sonar.jdbc.password>sonar</sonar.jdbc.password>
      </properties>
    </profile>

  </profiles>

    <properties>

        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>

        <antlr.version>3.5.2</antlr.version>
        <archaius.version>0.5.12</archaius.version>
        <astyanax.version>1.56.49-SNAPSHOT-UG-1</astyanax.version>
        <cassandra.version>1.2.18</cassandra.version>
<!--        <chop.version>1.0</chop.version>-->
        <commons.codec.version>1.6</commons.codec.version>
        <commons.collections.version>3.2.1</commons.collections.version>
        <commons.io.version>2.4</commons.io.version>
        <commons.lang.version>3.1</commons.lang.version>
        <elasticsearch.version>1.4.4</elasticsearch.version>
        <fasterxml-uuid.version>3.1.3</fasterxml-uuid.version>
        <guava.version>18.0</guava.version>
        <guice.version>4.0-beta5</guice.version>
        <guicyfig.version>3.2</guicyfig.version>
        <hystrix.version>1.4.0</hystrix.version>
        <jackson-2-version>2.4.1</jackson-2-version>
        <mockito.version>1.10.8</mockito.version>
        <junit.version>4.11</junit.version>
        <kryo-serializers.version>0.26</kryo-serializers.version>
        <log4j.version>1.2.17</log4j.version>
        <rx.version>1.0.12</rx.version>
        <slf4j.version>1.7.2</slf4j.version>
        <surefire.version>2.16</surefire.version>
        <aws.version>1.10.6</aws.version>
        <metrics.version>3.0.0</metrics.version>

    </properties>

    <modules>
        <module>model</module>
        <module>collection</module>
        <module>graph</module>
        <module>queryindex</module>
        <module>common</module>
        <module>map</module>
        <module>queue</module>
    </modules>

    <build>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${surefire.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire.version}</version>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                        <include>**/*IT.java</include>
                    </includes>
                    <systemPropertyVariables>
                        <archaius.deployment.environment>UNIT</archaius.deployment.environment>
                    </systemPropertyVariables>
                    <argLine>-Xms2G -Xmx4G</argLine>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
          <includes>
            <include>**/*.properties</include>
          </includes>
        </resource>
        <!-- include everything else without filtering -->
        <resource>
          <directory>src/main/resources</directory>
          <filtering>false</filtering>
          <includes>
            <include>**</include>
          </includes>
        </resource>
      </resources>

        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </testResource>
        </testResources>

    </build>

    <repositories>
        <repository>
            <id>local-dependencies</id>
            <name>local-depedendencies</name>
            <url>file://${project.basedir}/../m2/repository</url>
        </repository>
    </repositories>

</project>
