2013-06-06 4 views
5

JDTを使用してJavaクラスをコンパイルします。 BatchCompilerは文字列を返しますが、列と行の情報に問題やエラーの配列が必要です。 compiler.compile(units);そのエラーをプリント・ライターに出力します。compiler.resolve(ユニット)は、私が望むものと全く同じですが、1つのjavaファイルしかコンパイルできません。JDTコンパイラをプログラムで使用するにはどうすればよいですか?

私はこのようにコンパイラオブジェクト作成:

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

とコンパイラにファイル名とファイルの内容が含まれているCompilationUnitsを作成します。

CompilationUnit[] units = project.toCompilationUnit(); 

私の知る限り、コンパイルする2つの方法があり、そのうちの一つは、それが列情報を返さないので、それは私のために有用ではないですが、(単位)そのたPrintWriterに、ボイドやプリントエラーや問題を返すメソッドをコンパイルしています。もう一つの方法はresolve(unit)メソッドですが、1つのCompilationUnitでしか動作しません。

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

私はJDTコンパイラをプログラムで複数のファイルをコンパイルする方法を知っていますか?

+0

CompilationUnitsをループして 'resolve'を呼び出す際に問題はありませんか? –

+0

@UnniKrisそれはうまくいきますが、私は解決が1つのCompilationUnitパラメータしか取らないと言っています。多くの.javaファイルを含むプロジェクトをコンパイルしようとしているため、CompilationUnits []ではループ処理を行っても問題は解決されません。また、CompilationUnitには他のCompilationUnitに関する情報はありません。 –

答えて

0

org.eclipse.jdt.internal.compiler.Compilerは内部APIです。そのresolveメソッドのJavaDocによると:Internal API used to resolve a given compilation unit. Can run a subset of the compilation process

代わりに、Javaファイルをコンパイルしてコンパイルの問題を特定する正式な方法は、hereと記載されています。基本的には、Javaプロジェクトを作成し、EclipseのBuilderを呼び出してから、プロジェクトのJava問題マーカーを照会します。

関連する問題