<!--
   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="1.0">
  <info organisation="org.apache.hadoop" module="${ant.project.name}" revision="${version}">
    <license name="Apache 2.0"/>
    <ivyauthor name="Apache Hadoop Team" url="http://hadoop.apache.org"/>
    <description>
        Hadoop Core
    </description>
  </info>
  <configurations defaultconfmapping="default">
    <!--these match the Maven configurations-->
    <conf name="default" extends="master,runtime"/>
    <conf name="master" description="contains the artifact but no dependencies"/>
    <conf name="compile" description="contains the artifact but no dependencies"/>
    <conf name="runtime" description="runtime but not the artifact"/>

    <!--
    These public configurations contain the core dependencies for running hadoop client or server.
    The server is effectively a superset of the client.
    -->
    <!--Private configurations. -->

    <conf name="common" visibility="private" extends="compile" description="common artifacts"/>
    <conf name="mapred" visibility="private" extends="compile,runtime" description="Mapred dependent artifacts"/>
    <conf name="javadoc" visibility="private" description="artiracts required while performing doc generation" extends="common"/>
    <conf name="test" extends="master" visibility="private" description="the classpath needed to run tests"/>
    <conf name="system" extends="test" visibility="private" description="the classpath needed to run system tests"/>

    <conf name="test-hdfswithmr" extends="test" visibility="private" description="the classpath needed to run tests"/>

    <conf name="releaseaudit" visibility="private" description="Artifacts required for releaseaudit target"/>
     
    <conf name="jdiff" visibility="private" extends="common"/>
    <conf name="checkstyle" visibility="private"/>

  </configurations>

  <publications>
    <!--get the artifact from our module name-->
    <artifact conf="master"/>
  </publications>
 <dependencies>
   <dependency org="org.apache.hadoop" name="hadoop-common" 
               rev="${hadoop-common.version}" conf="common->default"/> 
   <dependency org="org.apache.hadoop" name="hadoop-common-test" 
               rev="${hadoop-common.version}" conf="common->default"/> 
   <dependency org="org.apache.hadoop" name="hadoop-hdfs" 
               rev="${hadoop-hdfs.version}" conf="common->default"/> 
   <dependency org="org.apache.hadoop" name="hadoop-common-instrumented"
               rev="${hadoop-common.version}" conf="system->default"/>
   <dependency org="org.apache.hadoop" name="hadoop-hdfs-instrumented"
               rev="${hadoop-common.version}" conf="system->default"/>
   <dependency org="commons-logging" name="commons-logging" 
               rev="${commons-logging.version}" conf="common->master"/>
   <dependency org="log4j" name="log4j" rev="${log4j.version}" 
               conf="common->master"/>

   <dependency org="org.slf4j" name="slf4j-api" rev="${slf4j-api.version}" 
               conf="common->master"/>
   <dependency org="org.slf4j" name="slf4j-log4j12" 
               rev="${slf4j-log4j12.version}" conf="mapred->master"/>
   <dependency org="org.apache.hadoop" name="hadoop-common-test" 
               rev="${hadoop-common.version}" conf="test->default"/>
   <dependency org="org.apache.hadoop" name="hadoop-hdfs-test" 
               rev="${hadoop-hdfs.version}" conf="test->default"/>

   <dependency org="checkstyle" name="checkstyle" rev="${checkstyle.version}"
               conf="checkstyle->default"/>

   <dependency org="jdiff" name="jdiff" rev="${jdiff.version}"
               conf="jdiff->default"/>
   <dependency org="xerces" name="xerces" rev="${xerces.version}"
               conf="jdiff->default"/>

   <dependency org="org.apache.rat" name="apache-rat-tasks" 
               rev="${rats-lib.version}" conf="releaseaudit->default"/>
   <dependency org="commons-lang" name="commons-lang" 
               rev="${commons-lang.version}" conf="releaseaudit->default"/>
   <dependency org="commons-collections" name="commons-collections" 
               rev="${commons-collections.version}" 
               conf="releaseaudit->default"/>

   <dependency org="org.apache.lucene" name="lucene-core" 
               rev="${lucene-core.version}" conf="javadoc->default"/>
   <dependency org="org.apache.hadoop" name="avro" rev="${avro.version}" 
               conf="common->default">
      <exclude module="ant"/>
      <exclude module="jetty"/>
      <exclude module="slf4j-simple"/>
    </dependency>
   <dependency org="org.mockito" name="mockito-all" rev="${mockito-all.version}" 
               conf="test->default"/>
   <dependency org="org.mortbay.jetty" name="jetty-servlet-tester" rev="${jetty.version}"
               conf="test->default"/>
   <!-- dependency addition for the fault injection -->
   <dependency org="org.aspectj" name="aspectjrt" rev="${aspectj.version}"
               conf="common->default"/>
   <dependency org="org.aspectj" name="aspectjtools" rev="${aspectj.version}"
               conf="common->default"/>

 </dependencies>
  
</ivy-module>
