[英]Using Java Compiler API, what classes were created?
因为单个Java文件可以编译成任意数量的类文件,所以编译器API是否有一些方法可以找出生成的类文件? 它输出到可能包含其他文件的目录,所以我不能只看那个。
我想出了似乎有用的东西。 * FileManager具有回调以获取事物的位置,包括输出的内容。 您可以使用ForwardingJavaFileManager将其包装,覆盖并存储调用中的值。
final List<String> classFiles = new ArrayList<>();
StandardJavaFileManager inner = compiler.getStandardFileManager(null, null, null);
JavaFileManager fileManager = new ForwardingJavaFileManager(inner) {
@Override
public JavaFileObject getJavaFileForOutput(Location location, String className,
JavaFileObject.Kind kind, FileObject sibling) throws IOException {
JavaFileObject o = super.getJavaFileForOutput(location, className, kind, sibling);
classFiles.add(o.getName());
return o;
}
};
javax.tools包显示了几种管理编译单元的方法。
我认为我们不能使用任何给定的引用找到Java Compiler API创建的非公共类。 您需要在输入java文件上解析(或应用reg表达式)以标识可用的类名。 获得类的名称后,您应该能够使用自定义类加载器加载它们。
Satheesh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.