(JavaCompiler) Компиляция нескольких файлов одновременно
Поэтому я работаю над созданием программы, которая использует встроенный JavaCompiler API для компиляции каталога файлов.java. Я получил его через каталог для компиляции файлов и даже компилирует их, но не в том порядке, в котором я нуждаюсь. Я возвращаюсь к классическому "не могу найти символ", так как некоторые классы зависят друг от друга. Так что группа файлов, скомпилированных нормально с javac, не работает с моей программой.
Мне нужен способ либо скомпилировать их в определенном порядке (мой последний вариант на самом деле разбирает файл на предмет ссылок, но я бы предпочел этого не делать), либо компилировать одновременно.
Вот мой код:
import javax.tools.*;
import java.io.*;
import java.util.*;
public class SimpleCompileTest
{
public static void main(String[] args)
{
try{
File[] files;
File dir = new File("Thing");
files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".java");
}
});
File file = new File("Errors.txt");
try{
FileOutputStream errorStream = new FileOutputStream("Errors.txt");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
for(int i = 0; i < files.length; i++)
{
int compilationResult = compiler.run(null, null, errorStream, files[i].getPath());
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}
}catch(Exception e)
{
System.out.println("error in compiler");
}
}catch(Exception h)
{
System.out.println("error in filename");
}
}
}
РЕДАКТИРОВАТЬ: Подстановочные знаки (т.е. *.java) не работают в JavaCompiler...
ОТВЕТ: Из комментариев я попытался вместо файлов [i].getPath() передать компилятору строку [], содержащую все пути для всех файлов. Работает отлично! Спасибо!
1 ответ
Из комментариев я попытался вместо файлов [i].getPath() передать компилятору строку [], содержащую все пути для всех файлов. Ниже приведено решение.
import javax.tools.*;
import java.io.*;
import java.util.*;
public class SimpleCompileTest
{
public static void main(String[] args)
{
try{
File[] files;
File dir = new File("Thing");
files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".java");
}
});
String[] filenames = new String[files.length];
for(int i = 0; i < files.length; i++)
filenames[i] = files[i].getName();
File file = new File("Errors.txt");
try{
FileOutputStream errorStream = new FileOutputStream("Errors.txt");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, errorStream, filenames);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}catch(Exception e)
{
System.out.println("error in compiler");
}
}catch(Exception h)
{
System.out.println("error in filename");
}
}
}