今天用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