是否有使用外部存储源代码,并将其加载到一个Java PROGRAMM的方式,使得它可以通过将其可使用?

我想有,可以在不修改的完整源代码来改变的程序和,这是可能的,即使没有这种每次编译。另一个优点是,我可以改变代码的部分,如我想要的。

当然,我必须有接口,以便能够将数据发送到这一点,并再次得到它放回固定源程序。

和它当然应该是比纯解释系统更快。

那么,有在这样做了后这样做这样的外部源代码部分的额外的编译和PROGRAMM的开始的方法吗?

感谢您提前,安德烈亚斯:)

有帮助吗?

解决方案

您需要 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);
}

本应打印在标准输出test,如通过在测试源代码中的静态初始化完成。进一步使用会比较容易,如果这些类器具一定的接口,它已经在类路径中。否则,你需要涉及反射API 来访问和调用方法/字段。

其他提示

在Java 6或更高版本,你可以通过javax.tools包访问编译器。 ToolProvider.getSystemJavaCompiler()将让你 javax.tools .JavaCompiler 中,您可以配置编译源。如果使用的是早期版本的Java,你仍然可以得到它通过内部com.sun.tools.javac.Main接口,虽然这是少了很多灵活性。

的Java6具有脚本API。我的JavaScript中使用它,但我相信你可以把它编译外部Java代码。

http://java.sun.com/developer/technicalArticles/ J2SE /桌面/脚本/

编辑:这是更相关的链接: “动态源” 在Java应用程序代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top