今天用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文档没有再出现乱码。




http://blog.51cto.com/winters1224/873962