<!--

    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>

  <parent>
    <groupId>org.apache.apex</groupId>
    <artifactId>apex</artifactId>
    <version>3.3.1-incubating-SNAPSHOT</version>
  </parent>

  <artifactId>apex-engine</artifactId>
  <packaging>jar</packaging>

  <name>Apache Apex (incubating) Stream Processing Engine</name>

  <properties>
    <checkstyle.console>false</checkstyle.console>
  </properties>

  <build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <!-- Publish tests jar -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
            <phase>package</phase>
          </execution>
        </executions>
        <configuration>
          <excludes>
            <!-- never include into jar (used in minicluster test) -->
            <exclude>**/yarn-site.xml</exclude>
          </excludes>
          <archive>
            <manifestEntries>
              <dt-buildtime>${maven.build.timestamp}</dt-buildtime>
              <dt-buildversion>${project.version}</dt-buildversion>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>pl.project13.maven</groupId>
        <artifactId>git-commit-id-plugin</artifactId>
        <version>2.1.13</version>
        <executions>
          <execution>
            <id>create-git-version-info</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>revision</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <verbose>false</verbose>
          <prefix>git</prefix>
          <generateGitPropertiesFile>true</generateGitPropertiesFile>
          <generateGitPropertiesFilename>target/classes/dt-git.properties</generateGitPropertiesFilename>
          <failOnNoGitDirectory>false</failOnNoGitDirectory>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>create-client-mvn-generated-classpath</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <!--
              generate runtime classpath for running client in dev environment
              -->
              <outputFile>${project.build.directory}/mvn-generated-runtime-classpath</outputFile>
              <includeScope>runtime</includeScope>
              <!--excludeGroupIds>org.apache.hadoop</excludeGroupIds-->
            </configuration>
          </execution>
          <execution>
            <id>create-client-mvn-generated-classpath-no-hadoop</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <!--
              generate runtime classpath for running client in dev environment with no hadoop jars
              -->
              <outputFile>${project.build.directory}/mvn-generated-runtime-classpath-no-hadoop</outputFile>
              <includeScope>runtime</includeScope>
              <excludeGroupIds>org.apache.hadoop</excludeGroupIds>
            </configuration>
          </execution>
          <execution>
            <id>create-mvn-generated-classpath</id>
            <phase>generate-test-resources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <!-- needed to run the unit test to generate
              the required classpath that is required in the env
              of the launch container in the mini yarn cluster
              -->
              <outputFile>${project.build.directory}/test-classes/mvn-generated-classpath</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <!--downloadJavadocs>true</downloadJavadocs-->
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <maxAllowedViolations>3224</maxAllowedViolations>
          <logViolationsToConsole>${checkstyle.console}</logViolationsToConsole>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <filesets>
            <fileset>
              <directory>src/test/resources/testAppPackage/mydtapp/target</directory>
              <followSymlinks>true</followSymlinks>
            </fileset>
          </filesets>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.bval</groupId>
      <artifactId>bval-jsr303</artifactId>
      <version>0.5</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-beanutils-core</artifactId>
          <groupId>commons-beanutils</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apex-bufferserver</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.3.5</version>
      <exclusions>
        <exclusion>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey.contribs</groupId>
      <artifactId>jersey-apache-client4</artifactId>
      <version>${jersey.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-client</artifactId>
      <version>${hadoop.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-core-asl</artifactId>
        </exclusion>
        <exclusion>
          <artifactId>jackson-jaxrs</artifactId>
          <groupId>org.codehaus.jackson</groupId>
        </exclusion>
        <exclusion>
          <artifactId>jackson-xc</artifactId>
          <groupId>org.codehaus.jackson</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-server-tests</artifactId>
      <version>${hadoop.version}</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <artifactId>jackson-mapper-asl</artifactId>
      <groupId>org.codehaus.jackson</groupId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>jline</groupId>
      <artifactId>jline</artifactId>
      <version>2.11</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.9.2</version>
    </dependency>
    <dependency>
      <groupId>net.engio</groupId>
      <artifactId>mbassador</artifactId>
      <version>1.1.9</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version}</version>
      <type>test-jar</type>
      <exclusions>
        <exclusion>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-core-asl</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
        </exclusion>
        <exclusion>
          <artifactId>commons-beanutils</artifactId>
          <groupId>commons-beanutils</groupId>
        </exclusion>
        <exclusion>
          <artifactId>commons-beanutils-core</artifactId>
          <groupId>commons-beanutils</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>1.10.19</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>net.lingala.zip4j</groupId>
      <artifactId>zip4j</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.8.3</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <!-- We need this direct dependency because without this, it throws method not found exception on Amazon EMR version of hadoop 2.4.
      Amazon EMR hadoop has commons-codec-1.2 in its classpath. -->
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.10</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <version>${jetty.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-websocket</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <!-- use shaded asm library to avoid conflict -->
    <dependency>
      <groupId>org.apache.xbean</groupId>
      <artifactId>xbean-asm5-shaded</artifactId>
      <version>4.3</version>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <id>fullTests</id>
      <properties>
        <test.excludedGroups></test.excludedGroups>
      </properties>
    </profile>
  </profiles>

</project>
