最近在写javadoc方面的内容,本打算自己通过反射的机制拿到关于类中各种信息, 分析了maven的javadoc插件之后,发现它使用了qdox的开源包。试用了一把,还是不错的,大概情况如下:
源代码svn地址: https://svn.codehaus.org/qdox/


1、加入依赖:
 
  
  1. <dependency> 
  2.             <groupId>com.thoughtworks.qdox</groupId> 
  3.             <artifactId>qdox</artifactId> 
  4.             <version>1.9.2</version> 
  5. </dependency> 
2、使用可参考官方文档: http://qdox.codehaus.org/usage.html
 
  
  1. JavaDocBuilder builder = new JavaDocBuilder(); 
  2.         builder.addSource(new File("D:/java/com/alibaba/normandy/advice/AdviceHandlerTest.java")); 
  3.  
  4.         JavaPackage[] packages = builder.getPackages(); 
  5.         for (JavaPackage javaPackage : packages) { 
  6.             System.out.println(javaPackage.toString()); 
  7.         } 
  8.         JavaSource[] javaSources = builder.getSources(); 
  9.         for(JavaSource javaSource:javaSources ){ 
  10.             System.out.println(javaSource.toString()); 
  11.         } 
输出:
 
  
  1. package com.alibaba.normandy.advice //读取出来的包名
  2. package com.alibaba.normandy.advice; 
  3.  
  4. import org.junit.Assert.*; 
  5. import org.junit.Test; 
  6.  
  7. /** 
  8.  * @since 1.1 
  9.  * @version 1.1 
  10.  * @author keju.wangkj 
  11.  */ 
  12. public class AdviceHandlerTest { 
  13.  
  14.     /** 
  15.      * @step guid对应的activatedValue不存在 
  16.      * @expected 在Config_Value表中成功插入新记录 
  17.      * @expected 返回值1 (version = 1) 
  18. SimpleConfigValue中使用的StringUtil.defaultIfNull(simpleValue)是否有必要 
  19.      */ 
  20.     public void testBeforeServiceActions() { 
  21.      
  22.         fail("Not yet implemented"); 
  23.     } 
  24.  
  25.     public void testAfterServiceActions() { 
  26.      
  27.         fail("Not yet implemented"); 
  28.     } 
  29.  
  30.     public void testExceptionServiceActions() { 
  31.      
  32.         fail("Not yet implemented"); 
  33.     } 
  34.  
3、取得方法的tags
 
  
  1. JavaClass[] javaClasses = builder.getClasses(); 
  2.       for (JavaClass javaClass : javaClasses) { 
  3.           JavaMethod[] javaMethods = javaClass.getMethods(); 
  4.           for (JavaMethod javaMethod : javaMethods) { 
  5.               DocletTag[] docTags = javaMethod.getTags(); 
  6.               for (DocletTag docletTag : docTags) { 
  7.                   System.out.println(docletTag.getName() + "->" + docletTag.getValue()); 
  8.               } 
  9.           } 
  10.       } 
源文件:
 
  
  1. /** 
  2.    * QDox API检查 
  3.    *  
  4.    * @param p1, p2 
  5.    * @since 2011 
  6.    */ 
  7.   @Test 
  8.   public void test1() { 
  9.  
  10.   } 
  11.  
  12.   /** 
  13.    * QDox检查 
  14.    *  
  15.    * @param p1, p2 
  16.    * @since 2011 
  17.    */ 
  18.   @Ignore 
  19.   @Test 
  20.   public void test2() { 
  21.  
  22.   } 
 
 
 
测试输出:
 
param->p1, p2
since->2011
param->p1, p2
since->2011
 
-------------------------------------------------------------