使用另一个java程序编译java程序

使用另一个java程序编译java程序,java,compiler-construction,Java,Compiler Construction,我想制作一个java程序,从文件中读取另一个java程序,对其进行编译并显示错误和警告 我还想显示从文件中读取并编译的程序的输出 我该怎么做?这必须是一项作业 看一看 调用Java的接口™ 程序设计语言编译器 编译器可能在编译期间生成诊断信息,例如错误消息。如果提供了诊断侦听器,则将向侦听器提供诊断。如果未提供侦听器,则诊断将以未指定的格式格式化,并写入默认输出,即System.err,除非另有规定。即使提供了诊断侦听器,某些诊断也可能不适合诊断,并将写入默认输出 下面是我最近使用的一个小代码片

我想制作一个java程序,从文件中读取另一个java程序,对其进行编译并显示错误和警告

我还想显示从文件中读取并编译的程序的输出


我该怎么做?

这必须是一项作业

看一看

调用Java的接口™ 程序设计语言编译器

编译器可能在编译期间生成诊断信息,例如错误消息。如果提供了诊断侦听器,则将向侦听器提供诊断。如果未提供侦听器,则诊断将以未指定的格式格式化,并写入默认输出,即System.err,除非另有规定。即使提供了诊断侦听器,某些诊断也可能不适合诊断,并将写入默认输出

下面是我最近使用的一个小代码片段:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = 
       compiler.getStandardFileManager(null, null, null);

fileManager.setLocation(StandardLocation.CLASS_OUTPUT, compileDirList);


Iterable<? extends JavaFileObject> compilationUnits = 
       fileManager.getJavaFileObjectsFromFiles(files);

List<String> opts = new ArrayList<String>();
// set compiler's classpath to be same as the runtime's
opts.addAll(Arrays.asList("-classpath", System.getProperty("java.class.path")));

// do the actual compilation
compiler.getTask(null, fileManager, null, opts, null, compilationUnits).call();

只需使用System.exec执行javac。然后,您可以通过管道将输出传输到编译完成后读取的文件。大概是这样的:

System.execjavac*.java>output.out; readFileoutput.out


希望能有所帮助。

一个“从文件中读取另一个Java程序并对其进行编译并显示错误和警告的Java程序”称为Java编译器。已经写好了。您所要做的就是通过它的API或exec调用它

+1个有趣的问题。我想看看有什么答案。如何使用exec实现它?我正在尝试的是:进程p=Runtime.getRuntime.execjavac FileName.java;但不产生o/p。