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と同じディレクトリに置くと機能しません。srcディレクトリのscriptsフォルダを使用してIDE内からプロジェクトを実行した場合にのみ、プロジェクトを機能させることができます。
jarファイルと同じフォルダーにあるscriptsフォルダーを使用してプロジェクトを実行しようとすると、
AbstractEngine engine = (AbstractEngine) cl.loadClass(engineClass).newInstance();
行にClassNotFoundExceptionが発生します。