如何从java程序中编译.java文件

发布于 2024-12-19 10:17:14 字数 320 浏览 2 评论 0原文

可能的重复:
从 Java 内部编译外部 .java 文件

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

Possible Duplicate:
Compiling external .java files from within Java

I have been using examples from all over the net but I keep getting NullPointerExceptions when invoking the run method in JavaCompiler. If you know how to compile another java file from within a java file please provide code on how to do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

追星践月 2024-12-26 10:17:14

我已经使用 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();

I already used JavaCompiler to compile math expressions on the fly.

Here is how I did it:

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();
梦里兽 2024-12-26 10:17:14

来自STBC 文档(使用JavaCompiler)。

getSystemJavaCompiler() 的文档提到它返回“此平台提供的编译器,如果未提供编译器,则返回 null,但没有明确说明为什么它可能为 null,也没有说明编译器不可用于小程序或 Webstart 应用程序的事实。 ..

如果代码在非 SDK JRE 中运行,它将为 null(请参阅 系统要求)。

From the documentation for the STBC (which uses the JavaCompiler).

The docs for getSystemJavaCompiler() mention that it returns "the compiler provided with this platform or null if no compiler is provided", but do not make clear why it might be null, nor the fact that the compiler will not be available to applets or webstart apps. ..

It will be null if the code is run in a non SDK JRE (see explanation in the System Requirements).

蓝戈者 2024-12-26 10:17:14

您可以使用 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

You can use eclipse jdt compiler (http://www.eclipse.org/jdt/core). It is used in many projects to compile java.

Here is an example how tomcat uses it to compile servlets to .class: http://www.docjar.com/html/api/org/apache/jasper/compiler/JDTCompiler.java.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文