java - 动态编译源文件时如何为JavaCompiler提供接口(interface)?

标签 java dynamic runtime compilation classloader

我试图在运行时编译和加载一个类,但不知道该类的包。我知道该类应该符合接口(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/

相关文章:

java - 带有警告 '100' 的 CheckStyle 是一个魔数(Magic Number)

c# - 如何在 C# 中获取传递给 T 的属性类型?

javascript - R Shiny : Dynamic tabs within multiple navbarPage tabPanels

java - 当它应该在 rt.jar 中时,为什么我没有这个类?

java - 在某些条件下撤消微调器选择

java - 更改另一个 JComboBox 后填充 JComboBox

asp.net - 在asp.net控件之间动态添加<br/>

iphone - 使用运行时库覆盖方法

Delphi Firemonkey - 在运行时加载样式

c - 运行时 C 函数详细信息