AntStructure Task

## AntStructure

### Description

Generates an DTD for Apache Ant buildfiles which contains information about all tasks currently known to Ant.

Actually the DTD will not be a real DTD for buildfiles since Ant's usage of XML cannot be captured with a DTD. Several elements in Ant can have different attribute lists depending on the element that contains them. `<fail>` for example can be a task or a nested child element of the `<sound>` task. Don't consider the generated DTD something to rely upon.

Also note that the DTD generated by this task is incomplete, you can always add XML entities using `<taskdef>` or `<typedef>`. See here for a way to get around this problem.

This task doesn't know about required attributes, all will be listed as `#IMPLIED`.

Since Ant 1.7 custom structure printers can be used instead of the one that emits a DTD. In order to plug in your own structure, you have to implement the interface `org.apache.tools.ant.taskdefs.AntStructure.StructurePrinter` and `<typedef>` your class and use the new type as a nested element of this task—see the example below.

### Parameters

Attribute | Description | Required
--- | --- | ---
output | file to write the DTD to. | Yes

### Examples

    <antstructure output="project.dtd"/>

Emitting your own structure instead of a DTD

First you need to implement the interface

    package org.example;
    import org.apache.tools.ant.taskdefs.AntStructure;
    public class MyPrinter implements AntStructure.StructurePrinter {
        ...
    }

and then use it via typedef

    <typedef name="myprinter" classname="org.example.MyPrinter"/>
    <antstructure output="project.my">
      <myprinter/>
    </antstructure>

Your own StructurePrinter can accept attributes and nested elements just like any other Ant type or task.