科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java SE6调用Java编译器的两种新方法2

Java SE6调用Java编译器的两种新方法2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 在很多Java应用中需要在程序中调用Java编译器来编译和运行。在Java SE6中为我们提供了标准的包来操作Java编译器,这就是javax.tools包。使用这个包,我们可以不用将jar文件路径添加到classpath中了。

来源:IT专家网 2008年5月7日

关键字: 编译器 调用 Java SE 6 java

  • 评论
  • 分享微博
  • 分享邮件
在使用完getTask后,需要通过StandardJavaFileManager的getJavaFileObjectsFromFiles或getJavaFileObjectsFromStrings方法得到compilationUnits对象。调用这两个方法的方式如下:.

Iterable<? extends JavaFileObject> getJavaFileObjectsFromFiles(
Iterable<? extends File> files)
Iterable<? extends JavaFileObject> getJavaFileObjectsFromStrings(
Iterable<String> names)

String[] filenames = …;
Iterable<? extends JavaFileObject> compilationUnits =
fileManager.getJavaFileObjectsFromFiles(Arrays.asList(filenames));

JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
diagnostics, options, null, compilationUnits);

  最后需要关闭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();
 }
}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章