【问题标题】:How to compile .java file from within java program [duplicate]如何从java程序中编译.java文件[重复]
【发布时间】:2011-12-02 23:19:15
【问题描述】:

可能重复:
Compiling external .java files from within Java

我一直在使用来自整个网络的示例,但是在调用 JavaCompiler 中的 run 方法时,我不断收到 NullPointerExceptions。如果您知道如何从 java 文件中编译另一个 java 文件,请提供有关如何执行此操作的代码。谢谢

【问题讨论】:

  • 发布你在做什么,然后我们可以找出你做错了什么。

标签: java compiler-construction compilation compiler-errors


【解决方案1】:

我已经使用 JavaCompiler 即时编译数学表达式。

我是这样做的:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
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();

【讨论】:

    【解决方案2】:

    来自documentation for the STBC(使用JavaCompiler)。

    getSystemJavaCompiler() 的文档提到它返回 “此平台提供的编译器或 null 如果没有提供编译器”,但不清楚为什么它可能是 null ,以及编译器对 applet 或 webstart 应用程序不可用的事实。 ..

    如果代码在非 SDK JRE 中运行,则为 null(参见 System Requirements 中的说明)。

    【讨论】:

      【解决方案3】:

      您可以使用 eclipse jdt 编译器 (http://www.eclipse.org/jdt/core)。它在许多项目中用于编译java。

      这是一个 tomcat 如何使用它来将 servlet 编译为 .class 的示例:http://www.docjar.com/html/api/org/apache/jasper/compiler/JDTCompiler.java.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2011-05-08
        • 1970-01-01
        相关资源
        最近更新 更多