Как я могу получить доступ к классам, загруженным 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);
                     ^

Собственность выше должна была быть предоставлена ​​JNLPClassLoader, поскольку он является частью одного из файлов, которые загружаются JWS

Код, вызывающий проблему, выглядит следующим образом.

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