我想编写一个工具,使用编译的.class
文件作为输入生成一些代码。具体来说,我想从这个类文件中读取:
输入类文件可能会引用不在工具类路径中的几种类型。这没关系,我不需要对它们做任何事情,只需要将完全限定的类型名称作为字符串读取。我确实需要从注释中获取一些信息,但它们将在工具的类路径中。
是否有可以用于此目的的图书馆?如果API有点像反射API那会很好,但它不一定是。
答案 0 :(得分:5)
ASM http://asm.ow2.org/允许您从文件/输入流中读取类而无需加载类。它允许您查看未在运行时加载的注释。它还可以用于修改类字节代码/注释/方法等。
答案 1 :(得分:4)
JDK中包含的javap tool可能已经完成了你所追求的目标。
答案 2 :(得分:2)
您需要查看两件事Reflection API
和Decompiler
答案 3 :(得分:1)
我认为你可以使用弹簧类扫描。
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
String basePackage = "org/springframework/samples/petclinic";
Set<BeanDefinition> components = provider.findCandidateComponents(basePackage);
for (BeanDefinition component : components) {
System.out.printf("Component: %s\n", component.getBeanClassName());
}
有关详细信息,请查看spring docs
答案 4 :(得分:1)
我正在使用asm查找所有方法。
答案 5 :(得分:0)
如果您有权生成.class文件,那么Reflection API应该可以提供帮助。