【问题标题】:Compiling external .java files from within Java从 Java 中编译外部 .java 文件
【发布时间】:2012-06-04 22:18:19
【问题描述】:

我正在制作一个可以编写 .java 文件的工具,然后(希望)将这些文件编译为 .class 文件。在一个过程中,用户选择一个文件目录,其中写入了多个 .java 文件。现在我想让程序编译这些 Java 文件。

【问题讨论】:

    标签: java file class compilation


    【解决方案1】:

    JavaCompiler 是你的朋友。查看文档here

    这里有一个关于如何使用编译器 API 的示例

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
    Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList("YouFileToCompile.java"));
    JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null,
            null, compilationUnits);
    boolean success = task.call();
    fileManager.close();
    

    【讨论】:

    • 我试过这个,并用绝对路径替换了“YouFileToCompile.java”(问题?)现在我得到一个 NullPointerException:StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
    • 听起来compiler 变量是null。确保您有正确的 Java 安装。看看这个寻求帮助java.net/node/688208
    • 必须是 .java 文件吗?如果我在 .txt 文件中有代码,它还能工作吗?
    • 另外,如果代码需要依赖,例如ASM,我需要在应用程序中编译 ASM,还是可以将它放在我的主应用程序中?
    【解决方案2】:

    如果代码从 JRE 运行,JavaCompiler 将是 null。它需要一个JDK,其中包括tools.jar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多