<?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="2.0">
    <info 
      organisation="org.apache.gora"
      module="gora-core"
      status="integration"/>

  <configurations>
    <include file="../../ivy/ivy-configurations.xml"/>
  </configurations>

  <publications defaultconf="compile">
    <artifact name="gora-core" conf="compile"/>
    <artifact name="gora-core-test" conf="test"/>
  </publications>

  <dependencies>

    <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="*->default"/>
    <dependency org="commons-lang" name="commons-lang" conf="*->default" rev="2.5"/>
    <dependency org="log4j" name="log4j" rev="1.2.15" conf="*->default">   
      <exclude org="com.sun.jdmk"/>
      <exclude org="com.sun.jmx"/>
      <exclude org="javax.jms"/>
    </dependency>
    
    <dependency org="org.apache.hadoop" name="hadoop-core" rev="0.20.2" conf="*->default">
      <exclude org="hsqldb" name="hsqldb"/>
      <exclude org="net.sf.kosmosfs" name="kfs"/>
      <exclude org="net.java.dev.jets3t" name="jets3t"/>
      <exclude org="org.eclipse.jdt" name="core"/>
      <exclude org="org.mortbay.jetty" name="jsp-*"/>
    </dependency>
    <dependency org="org.apache.hadoop" name="avro" rev="1.3.2" conf="*->default">
      <exclude org="ant" name="ant"/>
    </dependency>

    <!-- test dependencies -->
    <dependency org="org.apache.hadoop" name="hadoop-test" rev="0.20.2" conf="test->master"/>
    <dependency org="org.slf4j" name="slf4j-simple" rev="1.5.8" conf="test -> *,!sources,!javadoc"/>
    <dependency org="junit" name="junit" rev="4.6" conf="test->default"/>

  </dependencies>
</ivy-module>

