コードを動的にコンパイルするときに、Java Web Start によってロードされたクラスにアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/100737

質問

クライアント アプリケーションでコードを動的にコンパイルしています。Java Web Start でアプリケーションを起動すると例外が発生します。この例外は、Java Web Start を介して実行された場合にのみ発生します。

//The exception
evolver.core.model.change.execution.ExecutionException: Compilation failed!

DynamicComparator.java:2: package evolver.core.model.i does not exist
import evolver.core.model.i.IDefaultObject;
                           ^
DynamicComparator.java:9: cannot find symbol
symbol  : class PropertyBag
location: class DynamicComparator
PropertyBag b2 = new PropertyBag(dob2);
                     ^

上記のプロパティバッグは、JWSによってダウンロードされたファイルの1つの一部であるため、JNLPClassLoaderによって提供されるべきでした

問題の原因となるコードは次のようになります。

public static int compile(String javaFileName) {    
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    PrintWriter w = new PrintWriter(os);
    int res = com.sun.tools.javac.Main.compile(new String[]{"-d", "./", javaFileName}, w);
    if (res != 0)
        throw new ExecutionException("Compilation failed!" + "\n\n" + os.toString());
    return res;
}

ご協力をよろしくお願いいたします。

役に立ちましたか?

解決

現状では、サーバー上でコードをコンパイルする必要があります。サーバーは、クロスサイト攻撃を許可する可能性のあるコードを提供すべきではないため、十分に注意してください。その後、クライアントは URLClassLoader.newInstance を使用してそれをロードできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top