<?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.mahout</groupId>
    <artifactId>mahout-mr</artifactId>
    <version>14.2-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>mahout-integration_${scala.compat.version}</artifactId>
  <name>-- Mahout Classic Integration</name>
  <description>Optional components of Mahout which generally support interaction with third party systems,
    formats, APIs, etc.</description>

  <packaging>jar</packaging>

  <!-- per http://www.apache.org/dev/publishing-maven-artifacts.html#prepare-poms ensure that all poms have SCM managment.-->
  <scm>
    <connection>scm:git:git@github.com:apache/mahout.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/mahout.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf?p=mahout.git;a=tree;h=refs/heads/${project.scm.tag};hb=${project.scm.tag}</url>
    <tag>mahout_${scala.compat.version}-${project.version}-${release.candidate}
    </tag>
  </scm>
-->


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <configuration>
          <appendedResourcesDirectory>../mr/src/appended-resources</appendedResourcesDirectory>
          <resourceBundles>
            <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
          </resourceBundles>
          <supplementalModels>
            <supplementalModel>supplemental-models.xml</supplementalModel>
          </supplementalModels>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>

      <plugin>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>

    </plugins>

  </build>

  <dependencies>

    <!-- own modules -->

    <dependency>
      <groupId>org.apache.mahout</groupId>
      <artifactId>core_${scala.compat.version}</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.mahout</groupId>
      <artifactId>core_${scala.compat.version}</artifactId>
      <version>${project.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>${project.groupId}</groupId>-->
      <!--<artifactId>mahout-hdfs</artifactId>-->
      <!--<version>${project.version}</version>-->
    <!--</dependency>-->

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mr</artifactId>
      <version>${project.version}</version>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>${project.groupId}</groupId>-->
      <!--<artifactId>mahout-hdfs</artifactId>-->
      <!--<type>test-jar</type>-->
      <!--<scope>test</scope>-->
      <!--<version>${project.version}</version>-->
    <!--</dependency>-->

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mr</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
      <version>${project.version}</version>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>${project.groupId}</groupId>-->
      <!--<artifactId>mahout-math</artifactId>-->

    <!--</dependency>-->

    <!--<dependency>-->
      <!--<groupId>${project.groupId}</groupId>-->
      <!--<artifactId>mahout-math</artifactId>-->
      <!--<type>test-jar</type>-->
      <!--<scope>test</scope>-->
    <!--</dependency>-->

    <!-- 3rd party -->

    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <optional>true</optional>
      <version>1.4</version>
    </dependency>

    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <optional>true</optional>
      <version>1.6</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>org.apache.solr</groupId>-->
      <!--<artifactId>solr-commons-csv</artifactId>-->
      <!--<version>3.5.0</version>-->
    <!--</dependency>-->

    <!--<dependency>-->
      <!--<groupId>org.apache.lucene</groupId>-->
      <!--<artifactId>lucene-benchmark</artifactId>-->
      <!--<optional>true</optional>-->
    <!--</dependency>-->
    <!--<dependency>-->
      <!--<groupId>org.apache.lucene</groupId>-->
      <!--<artifactId>lucene-analyzers-common</artifactId>-->
      <!--<optional>true</optional>-->
    <!--</dependency>-->

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>2.11.2</version>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>bson</artifactId>
      <version>2.11.2</version>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <version>1.0.0</version>
    </dependency>

    <dependency>
      <groupId>org.hectorclient</groupId>
      <artifactId>hector-core</artifactId>
      <version>1.1-4</version>
      <optional>true</optional>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>org.slf4j</groupId>-->
      <!--<artifactId>slf4j-api</artifactId>-->
    <!--</dependency>-->

    <!--<dependency>-->
      <!--<groupId>org.slf4j</groupId>-->
      <!--<artifactId>slf4j-jcl</artifactId>-->
      <!--<scope>test</scope>-->
    <!--</dependency>-->

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>com.carrotsearch.randomizedtesting</groupId>-->
      <!--<artifactId>randomizedtesting-runner</artifactId>-->
      <!--<scope>test</scope>-->

    <!--</dependency>-->

    <!--<dependency>-->
      <!--<groupId>org.easymock</groupId>-->
      <!--<artifactId>easymock</artifactId>-->
      <!--<scope>test</scope>-->
      <!--<version>3.2</version>-->
    <!--</dependency>-->

  </dependencies>

</project>
