科幻

调用编译器编译牛

如果没有编译警告和错误,这个call() 方法会编译所有的 compilationUnits 变量指定的文件,以及有依赖关系的可编译的文件. 想要知道是否所有的都成功了,去查看一下返回的 Boolean 值. 只有当所有的编译单元都执行成功了,这个 call() 方法才返回 UE . 一旦有任何错误,这个方法就会返回 LSE. 在展示运行这个例子之前,让我们添加最后一个东西,DiagnosticListener, 或者更确切的说, DiagnosticCollector.的实现类.把这个监听器当作getTask()的第三个参数传递进去,你就可以在编译之后进行一些调式信息的查询了.

for (Diagnostic diagnostic : tDiagnostics()) {

nsole().printf(

\"Code: %s%n\" +

\"Kind: %s%n\" +

\"Position: %s%n\" +

\"Start Position: %s%n\" +

\"End Position: %s%n\" +

\"Source: %s%n\" +

\"Message: %s%n\",

前期提示过由于私募债和信托的刚性兑(百科)付被打破、外汇市场的套利空间在不断压缩、房地产投资(百科)收益将逐步萎缩等因素影响 tCode(), tKind(),

tPosition(), tStartPosition(),

tEndPosition(), tSource(),

tMessage(null));

}

在最后,你应该调用管理器的close() 方法.

把所有的放在一起,就得到的了下面的程序,让我们重新编译Hello类.

import .*;

import il.*;

import ols.*;

public class BigCompile {

public static void main(String args[]) throws IOException {

JavaCompiler compiler = tSystemJavaCompiler();

DiagnosticCollector diagnostics =

new DiagnosticCollector();

StandardJavaFileManager fileManager =

tStandardFileManager(diagnostics, null, null);

Iterable? extends JavaFileObject compilationUnits =

tJavaFileObjectsFromStrings(List(\"va\"));

pilationTask task = tTask(

null, fileManager, diagnostics, null, null, compilationUnits);

Boolean success = ll();

for (Diagnostic diagnostic : tDiagnostics()) {

nsole().printf(

\"Code: %s%n\" +

\"Kind: %s%n\" +

\"Position: %s%n\" +

\"Start Position: %s%n\" +

\"End Position: %s%n\" +

\"Source: %s%n\" +

\"Message: %s%n\",

tCode(), tKind(),

tPosition(), tStartPosition(),

tEndPosition(), tSource(),

tMessage(null));

}

ose();

intln(\"Success: \" + success);

}

}

编译和运行这个程序会输出成功的信息:

javac va

java BigCompile

Success: true

然而,如果你把 println 方法改成书写错误的 pritnln 方法,当你运行时你会得到下面的信息:

java BigCompile

Code: cation

Kind: ERROR

Position: 80

Start Position: 70

End Position: 88

Source: va

Message: va:3: cannot find symbol

symbol : method pritnln(ring)

location: class intStream

Success: false

使用Compiler API,你可以实现比在这篇简要的提示介绍的更多的事情. 例如,你可以控制输入输出的目录或者在集成编译器里高亮一些编译错误. 现在,向 Java Compiler API表示感谢,你可以使用标准API了. For more information on the Java Compiler API and JSR 199, see the JSR 199 specification.

查看本文来源

儿童健脾胃的药排行榜
重庆宫颈糜烂治疗多少钱
太原治疗男科哪家好
友情链接