因为单个 Java 文件可以编译成任意数量的类文件,编译器 API 有没有办法找出生成了哪些类文件?它正在输出到一个可能包含其他文件的目录,所以我不能只看那个。
问问题
181 次
3 回答
3
我想出了一些似乎可行的方法。*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;
}
};
于 2012-10-12T21:26:18.887 回答
0
javax.tools包显示了管理编译单元的几种方法。
于 2012-10-12T18:33:30.777 回答
0
我不认为我们可以使用任何给定的引用找到由 Java Compiler API 创建的非公共类。您需要对输入的 java 文件进行解析(或应用 reg 表达式)以识别可用的类名。获得类的名称后,您应该能够使用自定义类加载器来加载它们。
萨西什
于 2012-10-12T18:51:50.823 回答