<!--
  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.
-->
<!--
  AFTER CHANGING THIS FILE don't forget to issue: ant update-deps
-->
<ivy-module version="2.0">
    <info organisation="org.freemarker" module="docgen" />
    <configurations>
      <conf name="default" />
      <conf name="rat" description="for generating the Rat report" />
    </configurations>
    <publications>
        <artifact name="docgen" type="jar" ext="jar"/>
    </publications>
    <dependencies>
        <dependency org="com.thaiopensource" name="jing" rev="20091111" conf="default->default">
            <exclude org="xerces" name="xercesImpl" />
            <exclude org="xml-apis" name="xml-apis" />
        </dependency>
        <dependency org="org.freemarker" name="freemarker" rev="2.3.27-incubating" conf="default->default" changing="true" />
        <dependency org="xalan" name="xalan" rev="2.7.2" conf="default->default"> <!-- Needed on OpenJDK 9 -->
            <exclude org="xml-apis" name="xml-apis" />
        </dependency>
        <dependency org="org.apache.ant" name="ant" rev="1.9.3" conf="default->default" />
        
        <dependency org="org.apache.rat" name="apache-rat-tasks" rev="0.11" conf="rat->default" />
    </dependencies>
</ivy-module>
