为了在运行时创建和加载一个类,我首先从数据库中读取它的内容,创建一个新的SimpleJavaFileObject,最后在运行时通过将它传递给CompilationTask来编译它。关键是这个新文件可能引用其他文件(直接导入或通过 de.package.*“间接”),这些文件也存储在 db 中,不能作为类或源代码文件使用。
public class Test1 {
public de.otherpackage.Test2 reply() {
return null;
}
}
像 Test1 一样,我必须提前一步创建和编译 Test2,因为没有JavaFileObjects或类可以提供给编译器。
那么:如何获得编译器编译一个类所需的所有源的列表?
知道 Test1 需要 Test2 就足够了。我首先通过将Processor传递给CompilationTask来尝试它。我检查了树中的所有属性,但没有发现任何有用或完整的东西。如果在包上使用 * 导入了一个类,则无法获得完整的限定名......至少对我来说不是:-/
有任何想法吗?也许有更好的方法来解析javasources?
感谢您的帮助:-)