QDox
是一种高速、小巧的解析器。主要用于解析java源码,也能用于解析被类加载器加载了的class。
<!-- qdox -->
<dependency>
<groupId>com.thoughtworks.qdox</groupId>
<artifactId>qdox</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 本示例中使用到的相关工具类 -->
<dependency>
<groupId>com.idea-aedi</groupId>
<artifactId>common-spring</artifactId>
<version>2100.5.6</version>
</dependency>
QDox
默认解析当前类加载器加载了的class。如果你有外部class或者jar想要被纳入QDox
解析,你可以:
QDox
示例:
// 使用自定义的类加载器加载外部jar或class (注:示例中这个自定义的类加载器不是QDox自带的,本人使用的是其它工具包下的类)
LoadJarClassHelper loadJarClassHelper = new LoadJarClassHelper();
loadJarClassHelper.loadNormalJar(
Lists.newArrayList(new File("E:\\Maven\\Repository\\com\\idea-aedi\\component-dump-class\\2.6"
+ ".0\\component-dump-class-2.6.0.jar")), false, null, null);
URLClassLoader classLoader = loadJarClassHelper.getClassLoader();
// QDox构建器
JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name());
// 将自定义的类加载器添加进QDox
javaProjectBuilder.addClassLoader(classLoader);
// 获取加载进来的外部jar或class总额类的信息
JavaClass javaClass = javaProjectBuilder.getClassByName("com.ideaaedi.component.dump.NonExitClassFileTransformerExecutor");
System.err.println(javaClass.getFields());
QDox
是一种高速、小巧的解析器。主要用于解析Java源码,也能用于解析被类加载器加载了的class。
示例:
// QDox构建器
JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name());
// 通过addSource等相关方法, 将源码添加进QDox中 (注:可以多次添加)
javaProjectBuilder.addSourceTree(new File("E:\\Git\\Repository\\components\\component-decompile\\src\\main\\java\\"));
// 获取解析出来的JavaClass对象
javaProjectBuilder.getClasses().forEach(javaClass -> {
/*
* 获取信息
*/
System.err.println("包名\t" + javaClass.getPackageName());
System.err.println("全类名\t" + javaClass.getFullyQualifiedName());
System.err.println("注释\t" + javaClass.getComment());
System.err.println("字段\t" + javaClass.getFields());
System.err.println("方法\t" + javaClass.getMethods());
System.err.println("源码\t" + javaClass.getSource());
System.err.println("注释上的标签\t" + javaClass.getTags()); // 如注释上的@author JustryDeng,author即为标签名,JustryDeng即为标签值
// .....
/*
* 判断信息
*/
System.err.println("是否是抽象类\t" + javaClass.isAbstract());
System.err.println("是否是注解\t" + javaClass.isAnnotation());
System.err.println("是否是枚举\t" + javaClass.isEnum());
// .....
}