ビルド・マネージャについて

ビルド・マネージャはコンパイルを管理します。これは、ビルド・システムを構成するトランスレータのレジストリです。ビルド・マネージャは、JCompilerクラスのシングルトン・インスタンスにより表されます。また、IdeクラスのstaticメソッドgetCompilerにより取得されます。

トランスレータは、1つ以上のタイプの入力ファイルを取得し、これらのファイルから固有のタイプの出力ファイルを生成します。たとえば、SQLJトランスレータはSQLJファイルをJavaファイルに変換します。コピー・トランスレータの入力タイプと出力タイプは同じですが、入力ファイルはソース・ディレクトリ・パスから取得され、出力ファイルはクラス・ディレクトリに置かれます。トランスレータは、Translatorの実装のシングルトン・インスタンスです。

ビルド・システムは、有向グラフに編成されるトランスレータの集合です。有向グラフでは、認識されたファイル・タイプはノードで表され、トランスレータはノードをつなぐリンクにより表されます。たとえば、SQLJからJavaへ、JSPからJavaへ、JavaからCLASSへのトランスレータのみと、GIFからGIFへのコピー・トランスレータを持つ単純なビルド・システムは、次のような構造になります。

The build system graph described in the preceding paragraph.

グラフでは、連鎖的に変換を行うことで複雑なコンパイルの実装が可能です。たとえばSQLJファイルは、一時Javaファイルに変換することによりコンパイルされます。その後、このファイルはクラス・ディレクトリのClassファイルに変換されます。

ビルド・システムは、アドインがロードされる起動時にアセンブルされます。ビルド・システムに変換を追加するアドインは、変換をインスタンス化してJCompilerregisterTranslatorメソッドに渡すことにより、変換の追加を行います。このとき、ビルド・マネージャはトランスレータのgetInputTypesおよびgetOutputTypesメソッドを問い合せ、リンクの両端を識別します。(複数の入力タイプ、出力タイプを持つトランスレータは、グラフで複数のリンクを定義します。)各ノードは、複数のトランスレータの末端とはなりません。したがって、各ファイル・タイプのコンパイル・パスが2つ以上になることはありません。この規則に違反するトランスレータの登録は拒否され、コンソールにエラーが表示されます。同様に、ループするコンパイル・パス(コピー・トランスレータの1リンク・ループ以外)を使用するトランスレータも拒否されます。

コンパイルは、ユーザーがナビゲータでプロジェクトまたはその他のノードを選択し、JDeveloperのユーザー・インタフェースから「再ビルド」または「メイク」を選択すると、インスタンス化されます。ビルド・マネージャはプロジェクトのファイルを収集し、連鎖的に実行するコンパイルのうち、最初の段階のコンパイルを後のコンパイルよりも先に実行するように順番に並べ、1つのセットとします。これは、各トランスレータに順に渡されます。たとえば、JSPからJavaへのトランスレータは、JavaからCLASSへのトランスレータよりも先になります。各トランスレータは変換するファイルをセットから抽出し、変換を行います。さらにコンパイルが必要な場合は、出力ファイルをセットに戻します。最後のトランスレータ(JavaからCLASSへのトランスレータなど)およびコピー・トランスレータは、出力ファイルをセットには戻しません。セットが空になると、コンパイルが完了します。

トランスレータは、Translatorインタフェースの実装です。次のメソッドは、実際のコンパイル・プロセスに関わるTranslator実装の基本的なメソッドです。

ユーザーは、「プロジェクトの設定」ツリーの「コンパイラ」ブランチで、ページのコンパイル設定オプションを設定します。(「プロジェクト」->「プロジェクトの設定」を選択してダイアログを開きます。)カスタムの構成ページをインストールするには、JCompiler registerNavigableメソッドを使用します。

コンパイル・プロセスの監視が必要な拡張機能では、BuildSystemListenerインタフェースおよびCopyListenerインタフェースを実装する必要があります。


IDEの構造について

oracle.ide.Ide
oracle.ide.compiler.BuildSystemListener
oracle.ide.compiler.CopyListener
oracle.jdeveloper.compiler.JCompiler
oracle.jdeveloper.compiler.Translator
oracle.jdeveloper.compiler.Translator.Log