(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");
    }
    }

}
Другие вопросы по тегам