코드를 동적으로 컴파일할 때 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가 다운로드 한 파일 중 하나의 일부이므로 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