你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Java专栏
Java SE 6新特性: 编译器 API(5)
 
如果要使用 JavaFileManager,就必须构造 CompilationTask。JDK 6 提供了 JavaCompiler.CompilationTask 类来封装一个编译操作。这个类可以通过:JavaCompiler.getTask (
  Writer out,
  JavaFileManager fileManager,
  DiagnosticListener<? super JavaFileObject> diagnosticListener,
  Iterable<String> options,
  Iterable<String> classes,
  Iterable<? extends JavaFileObject> compilationUnits
)

  方法得到。关于每个参数的含义,请参见 JDK 文档。传递不同的参数,会得到不同的 CompilationTask。通过构造这个类,一个编译过程可以被分成多步。进一步,CompilationTask 提供了 setProcessors(Iterable<? extends Processor>processors) 方法,用户可以制定处理 annotation 的处理器。图 1 展示了通过 CompilationTask 进行编译的过程:

  图 1. 使用 CompilationTask 进行编译

  Java SE 6新特性: 编译器 API

  下面的例子通过构造 CompilationTask 分多步编译一组 Java 源文件。

  清单 2. 构造 CompilationTask 进行编译

01 package math;
02 public class Calculator {
03   public int multiply(int multiplicand, int multiplier) {
04     return multiplicand * multiplier;
05   }
06 }
07 package compile;
08 import javax.tools.*;
09 import java.io.FileOutputStream;
10 import java.util.Arrays;
11 public class Compiler {
12  public static void main(String[] args) throws Exception{
13   String fullQuanlifiedFileName = "math" + java.io.File.separator +"Calculator.java";
14   JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
15   StandardJavaFileManager fileManager =
      compiler.getStandardFileManager(null, null, null);
16   Iterable<? extends JavaFileObject> files =
       fileManager.getJavaFileObjectsFromStrings(
       Arrays.asList(fullQuanlifiedFileName));
17   JavaCompiler.CompilationTask task = compiler.getTask(
       null, fileManager, null, null, null, files);
18   Boolean result = task.call();
19   if( result == true ) {
20    System.out.println("Succeeded");
21   }
22  }
23 }

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089