【问题标题】:Generating, compiling and using Java code at run time?在运行时生成、编译和使用 Java 代码?
【发布时间】:2011-05-18 22:46:17
【问题描述】:

我有一个场景,我必须在我的应用程序运行时生成 Java 代码。

可以编译和运行我的应用程序中的代码(作为单独的应用程序)。

是否可以在同一个应用程序中编译然后使用它。想不出有什么可能

【问题讨论】:

    标签: java compilation


    【解决方案1】:

    查看Create dynamic applications with javax.tools我今天第二次提到这个——我发誓我不为他们工作。

    【讨论】:

      【解决方案2】:

      你可以使用JavaCompiler的实例:

      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
      

      点击链接获取有关如何使用它的示例。

      【讨论】:

      • 请注意,您需要一个 JDK 才能工作。 JRE 安装不包括编译器。
      • 好点Thorbjørn。如果他选择此替代方案,他的应用程序的最低要求将是 JDK 6
      • JRE 7 似乎已将 javax.tools.ToolProvider 放在 rt.jar 中。虽然我没有对此进行测试,但我确实看到了 jdk1.7.0_05/jre/lib/rt.jar: javax/tools/JavaCompiler.classjavax/tools/ToolProvider.class
      【解决方案3】:

      使用ProcessBuilderRuntime.exec(),您可以从您的java 代码运行任何命令行应用程序

      这包括 javac 编译器和 java 作为一个单独的进程

      【讨论】:

      • 运行 MyCompilingUtility.java 时,它调用Runtime#exec() 并带有javac MyFile.java 的参数,其中MyFile.java 是由MyCompilingUtility.java 通过PrintWriter 创建的,我看不到classMyFile.java 生成的文件。为什么会这样?
      • 检查javac的错误输出,javac期望工作目录是它正在编译的类的根包
      • 谢谢,@ratchet 怪胎。发布 Sotirios Delimanolis 的评论以详细说明您的有用建议 - stackoverflow.com/questions/21580975/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多