2

org.eclipse.jdt.core.compilationParticipant 拡張機能を使用して、他の場所で使用するコンパイル情報を収集するプラグインを作成しました。Eclipse IDE の複数のバージョンでテストしましたが、魅力的に動作します。私の最終的な目標は、ヘッドレスの本番 PDE ビルドで使用できるようにすることです。バンドルにログを追加したので、起動時、シャットダウン時、およびソース コンパイルがいつ発生したかを認識できます。問題は、これらのイベントが参加者のヘッドレス ビルドで捕捉されないことです。ヘッドレス PDE ビルドは、PDE ビルド スクリプトを実行する antrunner を実行する ant スクリプトから Equinox ランチャーを開始することによって開始されます。関連する実行範囲が非常に多く、どこから調べればよいかわかりません。私の最初の質問は、私がやろうとしていることは可能ですか? しなかった」CompilationParticipant は UI でしか機能しないようですが、これをデバッグする前に確認したいと思います。誰もこれをやったことがありますか?

コメントを追加しようとしましたが、言葉が多すぎるので、ここで少し明確にします。残念ながら、私が試みているようにフックを適用することを除いて、ビルドシステムを変更することはあまりできません。私は、PDE が生成する ant スクリプトを実行するのに時間を費やしましたが、それが JDT コンパイラ アダプタを呼び出していることを確認しました。JDT コンパイラ アダプタがプラグインから ant を実行しており、アクセスできる必要があるため、コンパイルの参加者を参照できるかどうかに興味を持ちました。 JDT コンパイラーをフックして、APT プロセッサーの実装やその他の DSL 実装などを実行できるようにすることが、参加者 API の意図であるように思われました。以上が参加者の意図に関する私の読みであり、APT プロセッサが動作するため、ヘッドレス ビルドで利用できると想定していますが、

PDE が ant スクリプトを生成し、javac タスクを呼び出しているのは事実ですが、JDT コンパイラを使用するように build.compiler プロパティも設定しているため、OSGi フレームワークにアクセスできると思います。これは、生成されたビルド ファイルの 1 つからの抜粋で、私が話していることを示しています。

<compilerarg line="-log '${temp.folder}/pde.example3.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>

org.eclipse.jdt.internal.core.JavaModelManager をデバッグすると、実際には JDT コンパイラが使用されていることがわかりますが、getRegisteredParticipants は何らかの理由で呼び出されていませんが、startup() は呼び出されています。参加者を登録します。

ビルド プロセス中に生成されるさまざまな VM にアタッチするデバッガーで何時間も費やした後、PDE ビルドのフローを特定することができました。CompilationParticipants が登場するとは思いません。実際、JavaBuilder が呼び出されるとは思いません。実行パスは次のようになります。

Ant は、OSGi フレームワークを起動し、AntRunner アプリケーションをインスタンス化する Equinox Launcher を起動する VM を生成します。これにより、PDE プラグインから build.xml ファイルを実行する Elcipse Ant プラグインから ant が起動し、Build.xml ファイルはすべてを生成します。 build.compiler を Eclipse Java Compiler (元は Visual Age for Java に基づく) をラップする JDTCompilerAdapter に設定することを含む、Eclipse プラグインを生成するために使用される ant スクリプト。JDTCompilerAdapter はいくつかのセットアップを行い、実際のコンパイルを行う org.eclipse.jdt.internal.compiler.batch.Main クラスをインスタンス化し、処理する org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager クラスもインスタンス化します。注釈処理。この実行パスのどこにも参加者は通知されません。JDTCompilerAdapter は、ant の OSGi 環境外で使用できるように特別に設計されているようです。CompilationParticipants では、antrunner を使用したヘッドレス PDE ビルドで必要なものが得られないようです。

4

2 に答える 2

0

大量のデバッグ、ドキュメントの読み取り、および PDE ソースのステップ実行の後、これは実行できないようです。ヘッドレス ビルドでは、JDTCompilerAdapter の実行は OSGi の外部で動作するように設計されており、単に javac タスクから呼び出されるフレームワークにアクセスできず、JavaBuilder を含まないため、参加者を呼び出しません。

于 2013-10-30T14:27:15.033 に答える