`
hanqunfeng
  • 浏览: 1541197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用UmlGraph在Javadoc中嵌入UML图表

阅读更多

最近在看《Java Power Tools》,对UmlGraph很感兴趣,于是小研究了下。

 

UmlGraph可以将由源代码生成的UML图表(这里就是类图)嵌入在javadoc中,这样的好处就是不需要人工维护,每次都是从源代码自动生成。

 

以下就是一个使用UmlGraph在javadoc生成UML图表的效果图:

 

在图表上点击相应的类图,则会跳转到对应类的页面,真的很好很强大。

 

那么,该如何使用UmlGraph呢?

一。下载与安装

UmlGraph官方网站:http://www.umlgraph.org/

现在下载的最新版本为:5.4

下载后解压到任意目录即可,比如:E:/UMLGraph-5.4。

 

另外,要想使用UmlGraph,还需要安装Graphviz。

 

Graphviz官网地址:http://www.graphviz.org/

 

在windows下安装Graphviz比较简单,下载到graphviz-2.26.3.msi(目前的最新版本),双击,一步步安装就行。

 

在linux下安装Graphviz稍显复杂,具体的安装步骤请参看:linux下graphviz的安装

 

二。ant配置

的在ant中使用UmlGraph很方便,只需要在<javadoc>任务中嵌入<doclet>标签,并使用<param>标签指定参数,以下是一个示例:

<!-- 生成javadoc -->
	<target name="javadoc" depends="compile" description="javadoc run">
		<echo message="javadoc run" />
		<delete dir="${reports.javadoc.dir}" />
		<mkdir dir="${reports.javadoc.dir}" />
		<javadoc sourcepath="${src.dir}" destdir="${reports.javadoc.dir}" encoding="UTF-8" charset="UTF-8" docencoding="UTF-8" author="true" version="true" use="true" access="private" linksource="true" windowtitle="${ant.project.name} API">
			<classpath>
				<path refid="compile.classpath" />
				<pathelement path="${compile.classes.dir}" />
			</classpath>
			<doctitle>
				<![CDATA[<H1>${ant.project.name}</H1>]]></doctitle>
		<bottom>
			<![CDATA[<i>Copyright &#169; 2010  All Rights Reseverd.</i>]]></bottom>

	<doclet name="org.umlgraph.doclet.UmlGraphDoc" path="E:/UMLGraph-5.4/UmlGraph.jar">
		
		<param name="-inferrel" />
		<param name="-inferdep" />
		<!-- 不显示详细日志信息,出问题时可以注释掉 -->		
                <param name="-quiet" />
		
		<param name="-hide" value="java.*" />
		<param name="-collpackages" value="java.util.*" />
		<param name="-postfixpackage" />
		<param name="-nodefontsize" value="9" />
		<param name="-nodefontpackagesize" value="7" />	
		<param name="-qualify" />
		<param name="-attributes" />
		<param name="-operations" />
		<param name="-enumerations" />
		<param name="-enumconstants" />
                <!-- 检索生成的html页面时使用的编码,默认为ISO-8859-1,
                  在向页面中插入图表时需要进行正则匹配,如果要匹配中文需要将其设置为UTF-8
		<param name="-outputencoding" value="UTF-8" />
                -->
		<param name="-types" />
		<param name="-visibility" />

                <!-- 提供外部javadoc地址,可以直接导航过去 -->
		<param name="-link" value="http://download.oracle.com/javaee/6/api/" />
		<param name="-link" value="http://static.springsource.org/spring/docs/2.5.x/api/" />
		<param name="-link" value="http://docs.jboss.org/hibernate/core/3.6/javadocs/" />
		<param name="-link" value="http://logging.apache.org/log4j/1.2/apidocs/" />
	</doclet>

</javadoc>
<echo message="javadoc completed!" />
</target>

 以上<param>配置的比较完整了,可以在javadoc中嵌入一个相当完整和详细的UML图表。

 

三。问题

使用过程中发现这样的问题,就是用ant生成javadoc时,只能在package页中嵌入UNL图表,而每一个具体的类页面中却不能实现嵌入,这是为什么呢?

 

于是乎,注释掉quiet参数查看详细日志

<!-- 是否显示详细日志信息,出问题时可以打开进行查看 
		<param name="-quiet" />
	-->	

结果发现,日志打印如下信息

[javadoc] Warning, could not find a line that matches the pattern '(Class|Interface|Enum) MultipartFileValidator.*'.
[javadoc]  Class diagram reference not inserted

 

 

意思是没有成功进行正则匹配,导致图表没有插入。这就比较奇怪,为什么插入包图表时没有问题呢?

 

ok,还是看下源码吧,问题出在org.umlgraph.doclet.UmlGraphDoc中。

图表插入包中的正则匹配规则是

Pattern.compile("</H2>")

 而图表插入类中的匹配规则是

Pattern.compile("(Class|Interface|Enum) " + classDoc.name() +".*")

 

因为javadoc是使用UTF-8编码生成的,所以在html页面中“Class”变成了“类”,所以匹配不上。

 

清楚了这一点后对源码做了如下修改:

方法一:

Pattern.compile("(Class|Interface|Enum|类|接口|枚举) " + classDoc.name() +".*")

 不过这时doclet中的参数outputencoding要设置为UTF-8:

<param name="-outputencoding" value="UTF-8" />

 方法二:

Pattern.compile(".*" + classDoc.name() +"</H2>.*")

 这与包匹配规则类似,不过确实很好用,推荐使用第二种方式进行修改。

 

ok,重新编译,打jar包,附件中为使用第二种方式打的jar包。

 

补充说明一下:编译UmlGraph需要用到JAVA_HOME/lib下的tools.jar。

 

 

 

  • 大小: 162.3 KB
1
1
分享到:
评论
2 楼 thinkdeeply 2012-02-23  
1 楼 hanqunfeng 2011-06-30  
更新说明:
由于sun呗oracle收购了,所以其将jdk的api路径改变了,现在jdk6的api路径如下:
<param name="-link" value="http://download.oracle.com/javaee/6/api/" />

路径配置错误会报错的。

相关推荐

    UMLGraph, 声明性规范和UML图绘制.zip

    UMLGraph, 声明性规范和UML图绘制 UMLGraph - UML图的声明性绘制UMLGraph允许声明性规范和UML图绘制。 你可以通过浏览系统的文档,或者通过将它打印到。要安装运行UMLGraph所需的元素,只需将lib目录的内容复制到与...

    UMLGraph-5.4.zip

    这些图表在软件开发过程中起着至关重要的作用,因为它们帮助开发者、设计师和项目团队可视化系统的结构和行为,从而促进沟通、理解和设计验证。 在解压 "UMLGraph-5.4.zip" 后,用户可以找到以下资源: 1. **文档*...

    UmlGraph经过处理修改源码的jar包

    因为javadoc是使用UTF-8编码生成的,所以在html页面中“Class”变成了“类”,所以匹配不上。修改内容如下: Pattern.compile("(Class|Interface|Enum|类|接口|枚举) " + classDoc.name() +".*")

    LightUML-开源

    LightUML是UMLGraph(www.spinellis.gr/sw/umlgraph/)的Eclipse(TM)(www.eclipse.org)集成,UMLGraph是一种用于从Java项目和程序包生成类图的轻型工具。 需要先前安装的GraphViz(www.graphviz.org)!

Global site tag (gtag.js) - Google Analytics