And*_*nig 3 java resources runtime-compilation
有没有办法使用外部存储的源代码并将其加载到Java程序中,以便它可以被它使用?
我希望有一个程序可以在不编辑完整源代码的情况下进行更改,甚至可以在不编译每次的情况下进行更改.另一个优点是,我可以像我想要的那样更改部分代码.
当然,我必须有接口,以便可以将数据发送到此并再次将其恢复到固定源程序.
当然,它应该比纯粹的口译系统更快.
那么这样做是否有一种方法可以像这些外部源代码部分的额外编译以及完成后的程序启动一样?
提前谢谢你,Andreas :)
您需要javax.tools API.因此,您需要至少安装JDK才能使其工作(并让您的IDE指向它而不是JRE).这是一个基本的启动示例(没有适当的异常和编码处理只是为了使基本示例更不透明,咳嗽):
public static void main(String... args) throws Exception {
String source = "public class Test { static { System.out.println(\"test\"); } }";
File root = new File("/test");
File sourceFile = new File(root, "Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("Test", true, classLoader);
}
Run Code Online (Sandbox Code Playgroud)
这应该test在stdout中打印,就像测试源代码中的静态初始化程序一样.如果这些类实现了已经在类路径中的某个接口,那么进一步使用会更容易.否则,您需要使用Reflection API来访问和调用方法/字段.