Java SE6.0调用Java编译器的两种新方法
http://tech.ddvip.com 2007年07月04日 社区交流
内容摘要:使用Java API来编译Java源程序有很多方法,现在让我们来看一种最简单的方法,通过JavaCompiler进行编译。
最后需要关闭fileManager.close();
下面是一个完整的演示程序。
import java.io.*;
import java.util.*;
import javax.tools.*;
public class test_compilerapi
{
private static void compilejava() throws Exception
{
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// 建立DiagnosticCollector对象
DiagnosticCollector<JavaFileObject> diagnostics = new
DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
diagnostics, null, null);
// 建立用于保存被编译文件名的对象
// 每个文件被保存在一个从JavaFileObject继承的类中
Iterable<? extends JavaFileObject> compilationUnits = fileManager
.getJavaFileObjectsFromStrings(Arrays asList("test3.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
diagnostics, null, null, compilationUnits);
// 编译源程序
boolean success = task.call();
fileManager.close();
System.out.println((success)?"编译成功":"编译失败");
}
public static void main(String args[]) throws Exception
{
compilejava();
}
}如果想得到具体的编译错误,可以对Diagnostics进行扫描,代码如下:
for (Diagnostic diagnostic : diagnostics.getDiagnostics())
System.out.printf(
"Code: %s%n" +
"Kind: %s%n" +
"Position: %s%n" +
"Start Position: %s%n" +
"End Position: %s%n" +
"Source: %s%n" +
"Message: %s%n",
diagnostic.getCode(), diagnostic.getKind(),
diagnostic.getPosition(), diagnostic.getStartPosition(),
diagnostic.getEndPosition(), diagnostic.getSource(),
diagnostic.getMessage(null));
责编:豆豆技术应用
正在加载评论...