<?xml version='1.0' encoding='utf-8'?>
<!-- 
   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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" 
  xmlns:ns0="http://ant.apache.org/ivy/maven" version="2.0">
  <info organisation="org.apache.nutch" module="${ant.project.name}">
    <license name="Apache 2.0" />
    <ivyauthor name="Apache Nutch Team" url="https://nutch.apache.org/" />
    <description>
        Apache Nutch
    </description>
  </info>

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

  <publications>
    <!--get the artifact from our module name-->
    <artifact conf="master" />
  </publications>

  <dependencies>
    <dependency org="org.elasticsearch.client" name="elasticsearch-rest-high-level-client" rev="7.10.2">
      <!-- exclusions of dependencies provided in Nutch core (ivy/ivy.xml) -->
      <exclude org="commons-codec" name="commons-codec" />
      <exclude org="commons-logging" name="commons-logging" />
      <exclude org="com.tdunning" name="t-digest" />
      <exclude org="org.apache.logging.log4j" name="log4j-api" />
      <exclude org="org.apache.lucene" name="*"/>
    </dependency>
    <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-backward-codecs" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-core" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-grouping" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-highlighter" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-join" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-memory" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-misc" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-queries" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-queryparser" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-sandbox" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-spatial-extras" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-spatial3d" rev="8.11.2"/>
    <dependency org="org.apache.lucene" name="lucene-suggest" rev="8.11.2"/>
  </dependencies>
  
</ivy-module>
