<?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>

  <parent>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-runners-parent</artifactId>
    <version>2.3.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-runners-apex</artifactId>

  <name>Apache Beam :: Runners :: Apex</name>

  <packaging>jar</packaging>

  <properties>
    <apex.core.version>3.6.0</apex.core.version>
    <apex.malhar.version>3.4.0</apex.malhar.version>
    <skipIntegrationTests>true</skipIntegrationTests>
    <!-- memory limit for embedded cluster -->
    <surefire.args>-Xmx2048m</surefire.args>
  </properties>

  <profiles>
    <profile>
      <id>local-validates-runner-tests</id>
      <activation><activeByDefault>false</activeByDefault></activation>
      <properties>
        <skipIntegrationTests>false</skipIntegrationTests>
      </properties>
    </profile>
  </profiles>

  <dependencies>
    <!-- Apex dependencies -->
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>apex-common</artifactId>
      <version>${apex.core.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>malhar-library</artifactId>
      <version>${apex.malhar.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>apex-engine</artifactId>
      <version>${apex.core.version}</version>
      <scope>runtime</scope>
      <exclusions>
        <!-- Fix build on JDK-9 -->
        <exclusion>
          <groupId>jdk.tools</groupId>
          <artifactId>jdk.tools</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- Beam -->
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-model-pipeline</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-core</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-jdk14</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-runners-core-construction-java</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-runners-core-java</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-jdk14</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>

    <dependency>
		<!-- javax.annotation.Nullable -->
       <groupId>com.google.code.findbugs</groupId>
       <artifactId>jsr305</artifactId>
    </dependency>

    <!-- Test scoped -->

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <scope>test</scope>
    </dependency>

    <!-- Depend on test jar to scan for ValidatesRunner tests -->
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-core</artifactId>
      <classifier>tests</classifier>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-jdk14</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!--dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-examples-java</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-jdk14</artifactId>
        </exclusion>
      </exclusions>
      <scope>test</scope>
    </dependency-->
    <!-- Optional Pipeline Registration -->
    <dependency>
      <groupId>com.google.auto.service</groupId>
      <artifactId>auto-service</artifactId>
      <optional>true</optional>
    </dependency>

    <!-- transitive test dependencies from beam-sdk-java-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-model-fn-execution</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-runners-core-java</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- Integration Tests -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
      </plugin>

      <!-- Unit Tests -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>${surefire.args}</argLine>
        </configuration>
        <executions>
          <execution>
            <id>validates-runner-tests</id>
            <phase>integration-test</phase>
            <goals>
              <goal>test</goal>
            </goals>
            <configuration>
              <excludes>
                <!-- BEAM-3241 -->
                <exclude>org.apache.beam.sdk.transforms.ParDoLifecycleTest</exclude>
              </excludes>
              <groups>org.apache.beam.sdk.testing.ValidatesRunner</groups>
              <excludedGroups>
                org.apache.beam.sdk.testing.FlattenWithHeterogeneousCoders,
                org.apache.beam.sdk.testing.UsesTimersInParDo,
                org.apache.beam.sdk.testing.UsesSplittableParDo,
                org.apache.beam.sdk.testing.UsesAttemptedMetrics,
                org.apache.beam.sdk.testing.UsesCommittedMetrics,
                org.apache.beam.sdk.testing.UsesTestStream
              </excludedGroups>
              <parallel>none</parallel>
              <failIfNoTests>true</failIfNoTests>
              <dependenciesToScan>
                <dependency>org.apache.beam:beam-sdks-java-core</dependency>
              </dependenciesToScan>
              <systemPropertyVariables>
                <beamTestPipelineOptions>
                  [
                    "--runner=TestApexRunner"
                  ]
                </beamTestPipelineOptions>
              </systemPropertyVariables>
              <skipTests>${skipIntegrationTests}</skipTests>
              <threadCount>4</threadCount>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>analyze-only</goal>
            </goals>
            <configuration>
              <ignoredUsedUndeclaredDependencies>
                <ignoredUsedUndeclaredDependency>org.apache.apex:apex-api:jar:${apex.core.version}</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>org.apache.commons:commons-lang3::${apache.commons.lang.version}</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>commons-io:commons-io:jar:2.4</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>com.esotericsoftware.kryo:kryo::${apex.kryo.version}</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>com.datatorrent:netlet::1.3.0</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>org.slf4j:slf4j-api:jar:${slf4j.version}</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>org.apache.hadoop:hadoop-common:jar:${hadoop.version}</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>joda-time:joda-time:jar:2.4</ignoredUsedUndeclaredDependency>
                <ignoredUsedUndeclaredDependency>com.google.guava:guava:jar:20.0</ignoredUsedUndeclaredDependency>
              </ignoredUsedUndeclaredDependencies>
            </configuration>
          </execution>
          <execution>
            <!--  used in ApexYarnLauncher to filter compile time Hadoop dependencies -->
            <id>dependency-tree</id>
            <phase>generate-test-resources</phase>
            <goals>
              <goal>tree</goal>
            </goals>
            <configuration>
              <outputFile>${project.build.directory}/classes/org/apache/beam/runners/apex/dependency-tree</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>

    <pluginManagement>
      <plugins>
        <!-- Eclipse has a problem with dependency:tree when it is not in package phase -->
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <versionRange>[2.10,)</versionRange>
                    <goals>
                      <goal>tree</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

</project>
