2013-06-06 7 views
5

Я использую JDT для компиляции моих классов Java. BatchCompiler возвращает строку, но мне нужен массив проблем/ошибок с их информацией о столбцах и строках. compiler.compile (единицы); печатает ошибку в своем printwriter, compiler.resolve (unit) делает именно то, что я хочу, но он может скомпилировать только один файл java.Как я могу использовать программный компилятор JDT?

Я создал объект компилятора следующим образом:

Compiler compiler = new Compiler(env, DefaultErrorHandlingPolicies.exitAfterAllProblems(), new CompilerOptions(), requestor, new DefaultProblemFactory()); 

И создать CompilationUnits, который содержит имена файлов и содержимое файла компилятора.

CompilationUnit[] units = project.toCompilationUnit(); 

AFAIK, есть 2 способа компиляции, один из них компилировать (единиц) метод, который возвращает недействительные и печатает ошибки и проблемы его PrintWriter, потому что он не возвращает информацию столбца, это не полезно для меня , Другим способом является метод разрешения (единицы), но он может работать только с одним компилятором.

compiler.resolve(units[index], true, true, true); 

Кто-нибудь знает, как я могу программным образом использовать компилятор JDT для компиляции нескольких файлов?

+0

Есть ли проблемы с циклом через CompilationUnits и вызовом 'resolve'. –

+0

@UnniKris Он работает, но, как я сказал, решение принимает только один параметр CompilationUnit. Looping, хотя CompilationUnits [] не решает проблему, потому что я пытаюсь скомпилировать проект, который включает в себя многие .java-файлы, зависит друг от друга, а CompilationUnit не имеет никакой информации о других компиляторах. –

ответ

0

org.eclipse.jdt.internal.compiler.Compiler - внутренний API. Согласно JavaDoc его метода resolve: Internal API used to resolve a given compilation unit. Can run a subset of the compilation process.

Описан официальный способ компиляции файлов Java и определения проблем компиляции here. В принципе, вы создаете проект Java и вызываете его застройщик Eclipse, а затем запрашиваете маркеры проблем Java проекта.