java compiler类_如何使用JavaCompiler API一次编译多个Java类

这篇博客探讨了如何使用Java Compiler API和StandardJavaFileManager来编译多个Java源文件。作者作为Java新手,遇到的问题是如何扩展示例代码以处理多个文件。解决方案在于将多个文件路径作为字符串集合传递给`getJavaFileObjectsFromStrings`方法,从而实现批量编译。文章还提醒初学者,理解Java的基础知识和文档对于学习更高级的概念至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是

java新手,我正在关注

this tutorial,因为它非常有用,并且非常详细地解释了所有内容.在本教程的底部,它解释了如何使用JavaFileManager来编译多个java文件,并提供了一些这样的示例,但我仍然无法自己编译多个文件

另一个问题是在示例中它只展示了如何编译一个java文件(我已经可以使用了),但是我遇到了多个文件,因为我希望能够编译由我自己的系统中有多个java类

这就是我现在所拥有的:

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

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

// Line 1.

MyDiagnosticListener listener = new MyDiagnosticListener(); // Line 2.

StandardJavaFileManager fileManager = compiler.getStandardFileManager(

listener, null, null); // Line 3.

String fileToCompile = "test" + File.separator + "ManyErrors.java";

// Line 4

Iterable fileObjects = fileManager.getJavaFileObjectsFromStrings(Arrays

.asList(fileToCompile)); // Line 5

CompilationTask task = compiler.getTask(null, fileManager, listener,

null, null, fileObjects); // Line 6

Boolean result = task.call(); // Line 7

if (result == true) {

System.out.println("Compilation has succeeded");

}

}

class MyDiagnosticListener implements DiagnosticListener {

public void report(Diagnostic diagnostic) {

System.out.println("Code->" + diagnostic.getCode());

System.out.println("Column Number->" + diagnostic.getColumnNumber());

System.out.println("End Position->" + diagnostic.getEndPosition());

System.out.println("Kind->" + diagnostic.getKind());

System.out.println("Line Number->" + diagnostic.getLineNumber());

System.out.println("Message->" + diagnostic.getMessage(Locale.ENGLISH));

System.out.println("Position->" + diagnostic.getPosition());

System.out.println("Source" + diagnostic.getSource());

System.out.println("Start Position->" + diagnostic.getStartPosition());

System.out.println("\n");

}

最佳答案 StandardJavaFileManager中的

getJavaFileObjectsFromStrings采用Iterable< String>.

这意味着您可以将任何可迭代的字符串集合传递给它以获得Iterable,然后将其传递给实现JavaCompiler接口的任何类的getTask method.

这与答案无关,但我想补充一点,如果您的目标是熟悉Java,那么您可能会走错路. Java类的程序编译是一个相当高级的主题,并且您似乎并不理解您完全发布的代码,因为您的问题的答案就在其中:Arrays.asList(fileToCompile)调用创建一个字符串数组其中只有一个字符串;即使没有文档,也应该很容易推断出getJavaFileObjectsFromStrings采用了与文件名对应的字符串数组.所以我真的不想尝试走这条路,而是先熟悉Java文档和更简单的概念.特别是如果您不熟悉OO概念.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值