<?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="solr-server" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
  <description>Solr Server</description>

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

  <!-- example tests are currently elsewhere -->
  <target name="test"/>
  <target name="test-nocompile"/>

  <!-- this module has no javadocs -->
  <target name="javadocs"/>

  <!-- this module has no jar either -->
  <target name="jar-core"/>

  <!-- nothing to compile -->
  <target name="compile-core"/>
  <target name="compile-test"/>

  <!-- nothing to cover -->
  <target name="pitest"/>

  <target name="resolve" depends="ivy-availability-check,ivy-fail,ivy-configure">
    <sequential>
    <!-- jetty libs in lib/ -->
    <ivy:retrieve conf="jetty,servlet,metrics" type="jar,bundle" log="download-only" symlink="${ivy.symlink}"
                  pattern="lib/[artifact]-[revision].[ext]" sync="${ivy.sync}"/>
    <ivy:retrieve conf="logging" type="jar,bundle" log="download-only" symlink="${ivy.symlink}"
                  pattern="lib/ext/[artifact]-[revision].[ext]" sync="${ivy.sync}"/>
    <!-- start.jar - we don't use sync=true here, we don't own the dir, but
         it's one jar with a constant name and we don't need it -->
    <ivy:retrieve conf="start" type="jar" log="download-only" symlink="${ivy.symlink}" 
                  pattern="start.jar"/>
    </sequential>
  </target>

</project>
