动态编译代码时如何访问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);
^
上面的属性袋应由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 来加载它。
不隶属于 StackOverflow