繁体   English   中英

使用Java Compiler API,创建了哪些类?

[英]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包显示了几种管理编译单元的方法。

请参阅JavaFileObjectJavaFileManager

我认为我们不能使用任何给定的引用找到Java Compiler API创建的非公共类。 您需要在输入java文件上解析(或应用reg表达式)以标识可用的类名。 获得类的名称后,您应该能够使用自定义类加载器加载它们。

Satheesh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM