zoukankan      html  css  js  c++  java
  • java源码解析之qdox

    前言

    qdox可以将一个java源码解析成一个包含class的对象,通过这个对象我们可以获取所有方法,属性,方法参数,返回值,注释,tag等信息。

    简单使用

    待解析的源码如下

    
    import java.io.BufferedInputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.zip.Deflater;
    import java.util.zip.DeflaterOutputStream;
    import java.util.zip.InflaterInputStream;
    
    public class Client {
    
      /**
       * 读取文件内容并压缩
       *
       * @param filePath 文件路径
       * @return 文件内容
       */
      private static byte[] readFromFileAndCompress(String filePath) {
        // test comment
        int len = -1;
        byte[] buf = new byte[1024];
        try (InputStream input = new BufferedInputStream(new FileInputStream(filePath));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            DeflaterOutputStream dos = new DeflaterOutputStream(output)) {
          while ((len = input.read(buf)) != -1) {
            dos.write(buf, 0, len);
          }
          return output.toByteArray();
        } catch (Exception e) {
          e.printStackTrace();
        }
        return new byte[0];
      }
    
    }
    

    使用qdox解析

    import com.thoughtworks.qdox.JavaProjectBuilder;
    import com.thoughtworks.qdox.model.DocletTag;
    import com.thoughtworks.qdox.model.JavaClass;
    import com.thoughtworks.qdox.model.JavaMethod;
    import java.io.File;
    import java.io.IOException;
    import java.util.Collection;
    
    public class Client {
    
      public static void main(String[] args) throws IOException {
        JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
        javaProjectBuilder.addSource(new File("D:\java\decompile\Client.java"));
        Collection<JavaClass> classes = javaProjectBuilder.getClasses();
        for (JavaClass aClass : classes) {
          System.out.println("class name: " + aClass.getName());
          for (JavaMethod classMethod : aClass.getMethods()) {
            System.out.println("method name:" + classMethod.getName());
            System.out.println("tags: ");
            for (DocletTag docletTag : classMethod.getTags()) {
              System.out.println("  " + docletTag.getName() + ": " + docletTag.getValue());
            }
            System.out.println("comment: " + classMethod.getComment());
          }
        }
      }
    
    }
    

    输出为

    class name: Client
    method name:readFromFileAndCompress
    tags: 
      param: filePath 文件路径
      return: 文件内容
    comment: 读取文件内容并压缩
    

    获取了类名称,方法名称,方法标签,方法注释等信息。
    maven的插件maven-javadoc-plugin中就使用到了qdox。

    参考

    【qdox】Java 代码解析利器 QDox

  • 相关阅读:
    执行一个外部程序并等待他的结束
    打开WORD文档时提示“word无法启动转换器mswrd632 wpc”的解决方法
    WaitForSingleObject的用法
    Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
    webservices传base64字串
    webservices传文件
    webservices 字节数组 Base64编码
    内存映射大文件
    文件分割合并
    move
  • 原文地址:https://www.cnblogs.com/strongmore/p/14988579.html
Copyright © 2011-2022 走看看