我正在使用 Janino 在运行时编译 java 文件以在程序中使用。我正在使用 netbeans,当我将目录放在 src 文件夹中时,我只能在运行时编译它。如果我尝试使用相对路径编译它,它将不起作用。
我正在关注http://docs.codehaus.org/display/JANINO/Advanced#Advanced-compiler上的示例
当我将要在运行时编译的文件放在 src 目录中名为 scripts 的文件夹中时,以下是有效的:
String engineClass = "DefaultEngine"; //name of engine class
String guiClass = "DefaultGUI"; // name of gui class
ClassLoader cl = new JavaSourceClassLoader(
this.getClass().getClassLoader(),
new File[]{new File("scripts")},
(String) null,
DebuggingInformation.NONE);
AbstractEngine engine = (AbstractEngine) cl.loadClass(engineClass).newInstance();
AbstractGUI gui = (AbstractGUI) cl.loadClass(guiClass).newInstance();
如果我将脚本文件夹放在与 jar 相同的目录中,它将不起作用。只有当我从 IDE 内部使用 src 目录中的脚本文件夹运行项目时,我才能让它工作。
当我尝试使用与 jar 文件位于同一文件夹中的脚本文件夹运行项目时,它会
AbstractEngine engine = (AbstractEngine) cl.loadClass(engineClass).newInstance();
在行上给出 ClassNotFoundException