코드를 동적으로 컴파일할 때 Java Web Start가 로드한 클래스에 어떻게 액세스할 수 있습니까?
-
01-07-2019 - |
문제
클라이언트 애플리케이션에서 코드를 동적으로 컴파일하고 있습니다.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를 사용하여 이를 로드할 수 있습니다.
제휴하지 않습니다 StackOverflow