动态编译代码时,如何访问Java Web Start加载的类?
时间:2020-03-06 14:25:17 来源:igfitidea点击:
我正在客户端应用程序中动态编译代码。当我使用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); ^
上面的PropertyBag应该由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加载它。