<!--
   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:e="http://ant.apache.org/ivy/extra">

  <info organisation="org.apache.zookeeper"
        module="${name}" revision="${version}">
    <license name="Apache 2.0"/>
    <ivyauthor name="Apache ZooKeeper" url="http://zookeeper.apache.org"/>
    <description>ZooKeeper</description>
  </info>

  <configurations defaultconfmapping="default">
    <conf name="master"/>
    <conf name="default" extends="optional"/>
    <conf name="test" extends="default"/>
    <conf name="mvn-ant-task" visibility="private"/>
    <conf name="optional"/> <!-- optional in generated pom -->
    <conf name="jdiff" visibility="private"/>
    <conf name="javacc" visibility="private"/>
    <conf name="releaseaudit" visibility="private" description="Artifacts required for releaseaudit target"/>
    <conf name="owasp" visibility="private" description="Artifacts required for owasp target"/>
    <conf name="clover" visibility="private" description="Artifacts required for clover target"/>
  </configurations>

  <publications>
    <artifact name='org.apache.zookeeper' type='jar' ext='jar' />
  </publications>

  <dependencies>
    <dependency org="org.slf4j" name="slf4j-api" rev="${slf4j.version}"/>
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="${slf4j.version}" transitive="false"/>
    <dependency org="commons-cli" name="commons-cli" rev="${commons-cli.version}" />
    <dependency org="com.github.spotbugs" name="spotbugs-annotations" rev="${spotbugsannotations.version}" />
  
    <dependency org="org.apache.maven.wagon" name="wagon-http" rev="${wagon-http.version}"
                conf="mvn-ant-task->default"/>
    <dependency org="org.apache.maven" name="maven-ant-tasks" rev="${maven-ant-tasks.version}"
                conf="mvn-ant-task->master"/>
    <!-- transitive false turns off dependency checking, log4j deps seem borked -->
    <dependency org="ch.qos.reload4j" name="reload4j" rev="${reload4j.version}" transitive="false"/>
    <dependency org="jline" name="jline" rev="${jline.version}" transitive="false"
                conf="optional->default"/>

    <dependency org="org.apache.yetus" name="audience-annotations"
                rev="${audience-annotations.version}"/>

    <dependency org="io.netty" name="netty-handler" conf="default" rev="${netty.version}">
      <artifact name="netty-handler" type="jar" conf="default"/>
    </dependency>
    <dependency org="io.netty" name="netty-transport-native-epoll" conf="default" rev="${netty.version}">
      <artifact name="netty-transport-native-epoll" type="jar" conf="default"/>
    </dependency>

    <dependency org="com.googlecode.json-simple" name="json-simple" rev="${json.version}" >
      <exclude org="junit" module="junit"/>
    </dependency>
    <dependency org="junit" name="junit" rev="${junit.version}" conf="test->default"/>
	<dependency org="org.mockito" name="mockito-core" rev="${mockito.version}"
               conf="test->default"/>
    <dependency org="com.puppycrawl.tools" name="checkstyle" rev="${checkstyle.version}"
                conf="test->default">
        <exclude org="commons-collections" module="commons-collections"/>
        <exclude org="commons-cli" module="commons-cli"/>
    </dependency>
    <!-- force the tests to pull the latest commons-collections jar -->
    <dependency org="commons-collections" name="commons-collections" 
                rev="${commons-collections.version}" conf="test->default"/>

    <dependency org="org.bouncycastle" name="bcprov-jdk15on" rev="${bouncycastle.version}" conf="test->default"/>
    <dependency org="org.bouncycastle" name="bcpkix-jdk15on" rev="${bouncycastle.version}" conf="test->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="${apache-rat-tasks.version}" conf="releaseaudit->default">
        <exclude org="commons-collections" module="commons-collections"/>
    </dependency>
    <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.owasp" name="dependency-check-ant"
                rev="${dependency-check-ant.version}" conf="owasp->default"/>

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

    <dependency org="org.apache.kerby" name="kerby-config" rev="${kerby.version}" conf="test->default">
          <exclude org="org.slf4j" module="slf4j-api"/>
          <exclude org="org.slf4j" module="slf4j-log4j12"/>
    </dependency>
    <dependency org="org.apache.kerby" name="kerb-simplekdc" rev="${kerby.version}" conf="test->default">
        <exclude org="org.slf4j" module="slf4j-api"/>
    </dependency>
    <dependency org="org.apache.kerby" name="kerb-core"
                rev="${kerby.version}" conf="test->default">
        <exclude org="org.slf4j" module="slf4j-api"/>
    </dependency>
    <dependency org="org.apache.kerby" name="kerb-server"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-common"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-admin"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-identity"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-client"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-util"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerb-crypto"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerby-util"
                rev="${kerby.version}" conf="test->default"/>
    <dependency org="org.apache.kerby" name="kerby-asn1"
                rev="${kerby.version}" conf="test->default"/>

    <dependency org="net.java.dev.javacc" name="javacc" rev="${javacc.version}"
                conf="javacc->default" />

    <dependency org="org.eclipse.jetty" name="jetty-server" rev="${jetty.version}"
                conf="optional->default"/>
      <dependency org="org.eclipse.jetty" name="jetty-servlet" rev="${jetty.version}"
                  conf="optional->default"/>
    <dependency org="com.fasterxml.jackson.core" name="jackson-databind"
                rev="${jackson.version}" conf="optional->default"/>

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

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

    <conflict manager="strict"/>

  </dependencies>
</ivy-module>
