<?xml version="1.0" ?>
<!--
   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}">
    <license name="Apache 2.0"/>
    <ivyauthor name="Apache Hadoop Team" url="http://hadoop.apache.org"/>
    <description>
        Apache Hadoop
    </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="runtime" description="runtime but not the artifact" />

    <conf name="common" visibility="private"
      extends="runtime"
      description="artifacts needed to compile/test the application"/>
    <conf name="test" visibility="private" extends="runtime"/>
  </configurations>

  <publications>
    <!--get the artifact from our module name-->
    <artifact conf="master"/>
  </publications>
  <dependencies>
    <dependency org="org.apache.hadoop"
      name="hadoop-core"
      rev="${hadoop-core.version}"
      conf="common->default"/>
    <dependency org="commons-logging"
      name="commons-logging"
      rev="${commons-logging.version}"
      conf="common->default"/>
    <dependency org="commons-httpclient"
      name="commons-httpclient"
      rev="${commons-httpclient.version}"
      conf="common->default"/>
    <dependency org="commons-cli"
      name="commons-cli"
      rev="${commons-cli.version}"
      conf="common->default"/>
    <dependency org="junit"
      name="junit"
      rev="${junit.version}"
      conf="common->default"/>
    <dependency org="log4j"
      name="log4j"
      rev="${log4j.version}"
      conf="common->master"/>
  </dependencies>
</ivy-module>
