<!--
   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.
-->
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
  <info organisation="${hive.ivy.org}" module="hive-exec" revision="${version}">
    <license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt" />
    <description homepage="http://hive.apache.org">
      The Apache Hive (TM) data warehouse software facilitates querying and managing large datasets residing in distributed storage.
      https://cwiki.apache.org/confluence/display/Hive/Home
    </description>
  </info>
  <configurations>
    <include file="${ivy.conf.dir}/common-configurations.xml"/>
  </configurations>
  <dependencies>
    <dependency org="org.apache.hive" name="hive-metastore" rev="${version}"
                conf="compile->default" />
    <dependency org="org.apache.mina" name="mina-core" rev="${mina.version}"
                conf="test->default" />
    <dependency org="org.apache.hive" name="hive-hbase-handler" rev="${version}"
                conf="test->default" transitive="false"/>
    <dependency org="org.apache.hive" name="hive-contrib" rev="${version}"
                conf="test->default" transitive="false"/>
    <dependency org="org.apache.hive" name="hive-testutils" rev="${version}"
                conf="test->default" transitive="false"/>
    <dependency org="org.apache.hbase" name="hbase" rev="${hbase.version}"
                conf="test->default" transitive="false">
      <artifact name="hbase" type="jar"/>
      <artifact name="hbase" type="test-jar" ext="jar"
                m:classifier="tests"/>
    </dependency>
    <dependency org="com.google.protobuf" name="protobuf-java" 
                rev="${protobuf.version}" transitive="false"/>
    <dependency org="org.iq80.snappy" name="snappy" 
                rev="${snappy.version}" transitive="false"/>
    <dependency org="com.esotericsoftware.kryo" name="kryo" 
                rev="${kryo.version}" />

    <dependency org="org.codehaus.groovy" name="groovy-all"
                rev="${groovy.version}" />
    <dependency org="org.apache.ant" name="ant" rev="${apacheant.version}" />

    <dependency org="org.json" name="json" rev="${json.version}"/>
    <dependency org="commons-collections" name="commons-collections" rev="${commons-collections.version}"/>
    <dependency org="commons-configuration" name="commons-configuration" rev="${commons-configuration.version}"
                transitive="false"/>
    <dependency org="com.googlecode.javaewah" name="JavaEWAH" rev="${javaewah.version}"/>
    <dependency org="javolution" name="javolution" rev="${javolution.version}"/>

    <dependency org="jline" name="jline" rev="${jline.version}" transitive="false"/>

    <!-- Hack to get jobclient tests dependency in. -->
    <dependency org="org.apache.hadoop" name="hadoop-yarn-server-tests"
                rev="${hadoop-0.23.version}"
                conf="hadoop23.test->default">
      <artifact name="hadoop-yarn-server-tests" type="tests" ext="jar" m:classifier="tests"/>
      <exclude org="commons-daemon" module="commons-daemon"/><!--bad POM-->
      <exclude org="org.apache.commons" module="commons-daemon"/><!--bad POM-->
    </dependency>
    <dependency org="org.apache.hadoop" name="hadoop-mapreduce-client-app"
                rev="${hadoop-0.23.version}"
                conf="hadoop23.test->default">
      <include type="jar"/>
      <exclude org="commons-daemon" module="commons-daemon"/><!--bad POM-->
      <exclude org="org.apache.commons" module="commons-daemon"/><!--bad POM-->
    </dependency>
    <dependency org="org.apache.hadoop" name="hadoop-mapreduce-client-hs"
                rev="${hadoop-0.23.version}"
                conf="hadoop23.test->default">
      <include type="jar"/>
      <exclude org="commons-daemon" module="commons-daemon"/><!--bad POM-->
      <exclude org="org.apache.commons" module="commons-daemon"/><!--bad POM-->
    </dependency>

    <dependency org="com.google.guava" name="guava" rev="${guava.version}" transitive="false"/>

    <!-- Test Dependencies -->
    <dependency org="junit" name="junit" rev="${junit.version}" conf="test->default" />
    
  </dependencies>
</ivy-module>
