#  Gant -- A Groovy way of scripting Ant tasks.
#
#  Copyright © 2008 Russel Winder
#
#  Licensed 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.
#
#  Author : Russel Winder <russel.winder@concertant.com>

# Load user specific libraries that are Gant specific.
load !{user.home}/.gant/lib/*.jar
    
# Load user specific libraries that are Ant specific.
load !{user.home}/.ant/lib/*.jar
    
# Load user specific libraries that are for Groovy.
load !{user.home}/.groovy/lib/*.jar
    
# Load required libraries
load !{gant.home}/lib/*.jar

# Load Ant libraries.  If xml-apis.jar and xercesImpl.jar are in this directory then it leads to a:
#
#  Caught: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/NodeList"
#
# whenever an XML processing program that (possibly indirectly) uses a DOM is executed.  Get round this by
# selecting jars, basically all the known Ant jars, and ignoring everything else.
#
#  The directory might contain ant.jar but it would be bad to include this since Groovy is distributed
#  with a version of Ant and that should be used.  See next rule.
load !{ant.home}/lib/ant-*.jar

# load required libraries
load !{groovy.home}/lib/*.jar

# tools.jar for ant tasks
load ${tools.jar}
