<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>
これで、手作業で作る構造物はすべて作った。
では、これらの構造物から、ビルドプロセスにて他の構造物がすべて作られるのか?
そうだ。ビルドプロセスで何が起きるかを説明しよう。
中間構造物を格納する'intermediate'ディレクトリがプロジェクトディレクトリ内に作られる。例えば、Javaクラスファイルは中間構造物だ。なぜなら、最終的に、Javaクラスファイル群を格納するJarファイルを格納するUNO拡張機能ファイルは必要だが、裸のJavaクラスは必要ないから。
ははあ。
次に、各UNOIDLファイルがUNOデータタイプ「マージされていない」レジストリファイルにコンパイルされ、ディレクトリ、'intermediate/registry'配下に格納される。
分かった。
次に、ターゲット構造物を格納するディレクトリ、'target'がプロジェクトディレクトリ内に作られる。
次に、UNOデータタイプ「マージされていない」レジストリファイル群が、UNOデータタイプ「マージされた」レジストリファイルにマージされ、ディレクトリ、'target'配下に格納される。
UNOデータタイプ「マージされた」レジストリファイルはターゲット構造物なのか?それはUNO拡張機能ファイルに含まれるだけではないのか?
実のところ、このサンプルUNO拡張機能では、UNO拡張機能ファイルに含まれるだけだ。しかし、LibreOfficeに直接登録することもでき、将来的には、我々は、我々のすべてのUNOデータタイプを格納する単一のUNOデータタイプ「マージされた」レジストリファイルをビルドする単一のプロジェクトを作り、この単一のUNOデータタイプ「マージされた」レジストリファイルをLibreOfficeに登録するつもりだ。
すると、将来的には、我々は、すべてのUNOIDLファイルを単一のプロジェクトに集めるのか?
そうだ。これは、我々のUNOデータタイプを、我々のどのUNO拡張機能からもアクセス可能であるようにしたいからだ。
なるほど。
次に、Javaのクラスファイル群が、UNOデータタイプ「マージされた」レジストリファイルから作られる。これらは、ディレクトリ、'intermediate/classes'配下に格納される。
それらは、UNOインターフェースと'グローバルUNOサービス'インスタンスファクトリだな?
そうだ。
次に、Javaのソースファイルをコンパイルする。クラスファイルはディレクトリ、'intermediate/classes'配下に格納される。
なるほど。
次に、Javaクラスファイル群がJarファイルにアーカイブされるが、その際、マニフェストファイルには、'MANIFEST.MF.addition'の内容が書き込まれる。このJarファイルは、ディレクトリ、'target'配下に格納される。
このサンプル拡張機能ではJarファイルはターゲットファイルではなくUNO拡張機能ファイルに含まれるファイルであるが、先ほど述べたUNOデータタイププロジェクトではJarファイルがLibreOfficeに直接登録されるし、UNO拡張機能以外のプロジェクトではJarファイルは通常ターゲットファイルなので、Jarファイルはターゲットディレクトリ配下に格納している。
ふーむ、つまり、ビルドシステムはプロジェクト間で共通なので、一部のプロジェクトでターゲットファイルになり得るものは、すべてのプロジェクトでターゲットファイルとして扱われているわけだ。
そうだ。
次に、Jarファイル、UNOデータタイプ「マージされた」レジストリファイル、UNO拡張機能ファイルのマニフェストファイル、UNOコンポーネント設定ファイルが、UNO拡張機能ファイルにアーカイブされ、ディレクトリ、'target'配下に格納される。
ははあ。
次に、UNO拡張機能ファイルがLibreOfficeに登録される。
なるほど。