我试图在运行时编译和加载一个类,但不知道该类的包。我知道该类应该符合接口(interface)和源位置(以及类名)。我正在尝试以下操作:
/* Compiling source */
File root = new File("scripts");
File sourceFile = new File(root, "Test.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
Test.java 文件看起来像
import foo.Itest;
public class Test implements Itest{
...
}
我从编译器中得到了一个cannot find symbol symbol : class Itest
错误。如何为编译器提供接口(interface)(已加载)以避免此错误?
[编辑 - 已解决]:错误来自于接口(interface)是 ITest
并且源引用了 Itest
接口(interface)。
最佳答案
compiler.run()
似乎在外部运行,需要设置类路径。您是否尝试使用最后一个参数 args
将合适的类路径设置传递给 run()
调用?也许这就是 ToolProvider.getSystemToolClassLoader()
的原因。
这stackoverflow post也可能对您有所帮助。
关于java - 动态编译源文件时如何为JavaCompiler提供接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447359/