9.14 Creating an XDoclet Module

9.14.1 Problem

You have created a custom XDoclet code generator and now you need to create an XDoclet module.

9.14.2 Solution

Add an Ant jar task to your buildfile that packages up the code generator's class files, template files, and xdoclet.xml file.

9.14.3 Discussion

XDoclet 1.2 code generators are packaged into JAR files known as modules. Modules are nothing more than a JAR file with a well-defined structure. It is the same process as packaging up a WAR or EAR file, only an XDoclet module is much simpler.

Example 9-17 shows an Ant target, jar.perf.module, that creates an XDoclet module. There are two special considerations for creating a module. First, the name of the JAR file should end with "module". This is only a convention, but it should be followed. Second, the xdoclet.xml must be placed in the meta-inf directory of the JAR file. This step is required for XDoclet to map template namespaces and parent task and subtask relationships. It is easy to do, using jar's metainf subtask.

Example 9-17. Creating an XDoclet module
<target name="jar.perf.module" depends="compile.perf,generate.xdoclet.xml">
  <jar jarfile="${dir.build}/oreilly-junitperf-module.jar">
    <fileset dir="${dir.build}">
      <include name="**/perf/"/>
      <exclude name="**/xdoclet.xml"/>
    </fileset>
    <metainf dir="${dir.build}" includes="xdoclet.xml"/>
  </jar>    
</target>

9.14.4 See Also

Recipe 9.10 shows how to create a custom Ant Doclet subtask to generate JUnitPerf tests. Recipe 9.11 shows how to create the JUnitPerfDoclet tag handler class to perform simple logic and generate snippets of code. Recipe 9.12 shows how to create a custom template file that uses the JUnitPerfDoclet tag handler. Recipe 9.13 shows how to create an XDoclet xdoclet.xml file used to define information about your code generator. Chapter 8 provides information on the JUnitPerf tool and how to update your Ant buildfile to invoke JUnitPerfDoclet.