今天用ant生成javadoc时,出了两个小问题。
以下是最后完成版的build.xml。红色字体部分是与这两个问题相关的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="fundation" default="2-javadoc" basedir=".">

    <!-- 定义属性 -->
    <property name="dir.javadoc" value="javadocs" />
    <property name="src.java" value="src" />

    <!-- 完整的classpath -->
    <path id="full-classpath">
        <fileset file="lib/*.jar" />
        <pathelement path="bin" />
        <!-- 三个外部jar包-->
        <pathelement path="D:/bea/jrockit_160_14_R27.6.5-32/lib/tools.jar" />
        <pathelement
            path="D:/Program Files/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar" />
        <pathelement
            path="D:/Program Files/eclipse/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar" />
    </path>


    <!-- 第一步,初始化 -->
    <target name="1-init">
        <delete dir="${dir.javadoc}" />
        <mkdir dir="${dir.javadoc}" />
    </target>

    <!-- 第二步,生成文档 -->
    <!-- 注意编码格式 -->
    <target name="2-javadoc" depends="1-init">
        <javadoc destdir="${dir.javadoc}" windowtitle="ATIP Project Class Library"
            use="yes" linksource="true" splitindex="yes" encoding="UTF-8"
            docencoding="GBK">
            <classpath refid="full-classpath" />
            <packageset dir="${src.java}" defaultexcludes="yes">
            </packageset>
        </javadoc>
    </target>
</project>

先看<!-- 三个外部jar包-->这个地方。如果不把这三个jar包引入classpath中,将出现这个问题:

[javadoc] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc


上网查过之后发现,这个问题的原因是工程中引用了第三方jar包,而ant所用的classpath中没有相关定义。参见http://stackoverflow.com/questions/44853/why-am-i-getting-a-classcastexception-when-generating-javadocs
解决方法一目了然,把用到的第三方jar包引进来就行了。
关于这个问题,也有说法是把jdk下的lib/tools.jar引入ant的classpath中。我试了,没能解决这个问题。

再看<!-- 注意编码格式 -->和后面的编码格式定义。我的工程用的是UTF-8编码,但是如果我把编码、解码格式都定义为UTF-8,还是会出现乱码。我不知道原因。现有的这个配置是我枚举了编码、解码和GBK、UTF-8的可能组合之后找到的可行方案。用这个配置创建的javadoc文档没有再出现乱码。