<?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.
 -->
<project name="replicator" default="default" xmlns:ivy="antlib:org.apache.ivy.ant">

  <description>
    Files replication utility
  </description>

  <!-- TODO: go fix this in jetty, its stupid -->
  <property name="tests.policy" location="../tools/junit4/solr-tests.policy"/>

  <import file="../module-build.xml"/>

  <path id="classpath">
    <fileset dir="lib" />
    <pathelement path="${facet.jar}"/>
    <path refid="base.classpath"/>
  </path>

  <target name="resolve" depends="common.resolve">
    <sequential>
      <!-- javax.servlet jar -->
      <ivy:retrieve conf="servlet" log="download-only" type="orbit" symlink="${ivy.symlink}"/>
    </sequential>
  </target>

  <target name="init" depends="module-build.init,jar-facet"/>

  <target name="javadocs" depends="javadocs-facet,compile-core,check-javadocs-uptodate"
          unless="javadocs-uptodate-${name}">
    <invoke-module-javadoc>
      <links>
        <link href="../facet"/>
      </links>
    </invoke-module-javadoc>
  </target>

</project>
