我是java的新手,我正在遵循本教程,因为它非常有用,并且非常详细地解释了所有内容。在本教程的底部,它解释了如何使用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");
}
getJavaFileObjectsFromStringsfrom StandardJavaFileManager
需要Iterable<String>
.
这意味着你可以只向它传递任何可迭代的字符串集合,以便得到一个Iterable<? extends JavaFileObject>
,而又被传递给实现JavaCompiler
接口的任何类的getTask方法。
这与答案无关,但我想补充一点,如果你的目标是熟悉Java,你可能走错了路。Java 类的过程编译是一个相当高级的主题,您似乎没有完全理解您发布的代码,因为您的问题的答案就在其中:Arrays.asList(fileToCompile)
调用创建一个字符串数组,其中只有一个字符串;即使没有文档,也应该很容易推断出getJavaFileObjectsFromStrings
需要与文件名对应的字符串数组。所以我真的不会尝试走这条路,而是先熟悉Java文档和更简单的概念。特别是如果您不熟悉OO概念。