<!--
  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.29" 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>
