Buckminster

このページはhttp://wiki.idempiere.org/en/Buckminsterの翻訳です。

Buckminster(バックミンスター)はiDempiereプロジェクトで使用されているビルドツールです。BuckminsterはEclipseのプロジェクトで、そのサイトは http://www.eclipse.org/buckminster/ です。

Buckminsterはアパッチ IvyアパッチAnt、そしてMavenと比較されます。Buckminsterは、他のプロダクトでは"dependency solution(依存の解消)"などと言われる"マテリアライゼーション(Materialization)"や、ビルド、必要であればデプロイなどを行う事ができます。

Buckminsterの仕様のひとつに、異なるタイプのコンポーネントを許容し、それらをつなぐコネクターはコンポーネント独自のフォーマットを使用できる事があります。これは、Buckminsterが他のコンポーネントの依存関係やビルドするためのオプション、クラスパスなどの情報を取得できることを意味します。

Buckminsterは当初よりEclipseで使用する事を念頭に開発されており、今日では、Eclipseプロジェクトのひとつになっています。あなたはBuckminsterをあなたのEclipseプロジェクトのセットアップで活用できます。

ドキュメンテーション

Buckminsterのホームページ(http://www.eclipse.org/buckminster/)をみると、"Documentation"というBuckyBook.pdfファイルへのリンクを見つける事ができます。これは、Eclipse Buckminsterの完全なガイドです。この本は250ページもあり、それほど簡単ではありません。BuckminsterのホームページにはWikiもあります。あたながBuckminsterの概要を知りたいなら、Introducing BuckminsterIntroduction Buckminster を読んで下さい。

BuckminsterのWikiから、その基本コンセプトを下記にまとめました。

A Component Query (CQUERY)

CQUERYは、(通常は小さな)XMLファイルです。そこには、ダウンロードし、マテリアライズするコンポーネントの名前を記載します。CQUERYには、リソースマップ(RMAP)へのリファレンス(通常はURL)を含みます。

A Resource Map (RMAP)

RMAPもXMLファイルであり、CQUERYに記載されているコンポーネントがある場所を記載します。

コンポーネントを公開者は、通常そのコンポーネントの"CQUERY"と"RMAP"に記載する情報を提供しています。

Bills of Materials (BOM)

BOMもXMLファイルであり、CQUERYとRMAPからBuckminsterが自動作成します。そこには、コンポーネントの詳細情報が記述されます。

Component Specification(CSPEC)

CSPECもXMLファイルであり、特別なコンポーネントの依存関係を含むメタデータです。 CSPECは、Eclipseプラグインやフューチャーのために、Buckminsterが自動生成します。そのため、ほとんどの場合、CSPECをマニュアルで作成する必要はありません。

Component Specification Extention(CSPEX)

CSPEXもXMLファイルであり、自動作成されるCSPECを拡張する事ができます。BuckminsterがCSPECにメタデータを自動で追加できなかった場合に、CSPEXを使用して、マニュアル追加する事ができます。

Matrialisation Specification (MSPEC)

MSPECもXMLファイルであり、コンポーネントの公開者より、マシン環境に応じて特定のフォルダやデイレクトリにコンポーネントをダウンロードしマテリアライズするために提供される事があります。

Buckminsterの使用方法

Buckminsterには2つのユーザーインターフェースがあります。1つ目は、EclipseのプラグインとしてBuckminsterの更新サイト経由で、インストールする方法です。そうすると、Eclipse上でBuckminsterが使用できるようになります。 2つ目は、シェル上でBuckminsterを使用する事ができます。これは、例えば外部のサーバーでアプリケーションをビルドしたり実行するのに使用できます。

iDempiereにおけるBuckminsterの使用のされ方

iDempiereは、プラグインの集合体で、常に拡大しています。OSGiのアーキテクチャが採用されてADempiereからiDempiereになった後で、すべての人が正しくビルドできるツールが必要になりました。iDempiereはプラグイン構造であり、iDempiereが必要とするOSGiの各種プラグインを外部から同じ方法で取得する必要がありました。そのため、コンポーネントをダウンロードし、依存関係を解決する方法が必要でした。プロジェクト全体はEclipseプロジェクトとして作成され、依存関係などのすべての情報はEclipseのプロジェクトファイルとしてあるため、Buckminsterは、ベストなツールでした。

iDempiereプロジェクトのソースコードをダウンロードした時、マテリアライズを実施する必要があります。その意味は、Buckminsterが全ての依存関係や前提条件の情報をダウンロードします。より詳細な情報はInstallation in Eclipseを参照して下さい。

Buckminsterを、ジェンキンスのようなCIサーバーのヘッドレスビルド(Eclipseを使用しないビルド)で使用する事もできます。 Building iDempiere without Eclipseを参照して下さい。

Developing Plug-Ins - Continous Integration with Jenkins のページでは、ジェンキンスサバ―でCIを実現するためのヘッドレスBuckminsterの情報があります。

もし、自分のプラグインでBuckminsterを使用したいなら、Developing Plug-Ins - Get your Plug-In running. を参照して下さい。

Buckminsterを新たな依存関係の解決に使用できますか?

 原則的にはYesです。次の事を行えば、出来るのではないかと思います。

  • OSGiプラグインのリソースを見つける…多くの場合、OSGiは最新バージョンのライブラリを用意しています。単に普通のjarファイルです。
  • フューチャープロジェクトを作成するか拡張する
  • feature.xmlファイルを開き、バンドルの依存関係を宣言します。
  • org.adempiere.sdk-feature / adempiere.rmapを開いて下さい。そしてjarファイルを取得するのに必要な情報を入力して下さい。

 下記はRMAPのサンプルです。

 ...
 <rm:locator searchPathRef="workspace.feature.project" failOnError="false"/>
 <rm:locator searchPathRef="mavenorg"/>
 ...
 <rm:searchPath name="mavenorg">
   <rm:provider xsi:type="maven:MavenProvider" componentTypes="maven,osgi.bundle" readerType="maven2" source="false" mutable="false">
     <rm:uri format="http://central.maven.org/maven2"/>
     <maven:mappings>
       <maven:entry artifactId="itextpdf" groupId="com.itextpdf" name="com.itextpdf.itextpdf" />
     </maven:mappings>
   </rm:provider>
 </rm:searchPath>

参考サイト

Buckminsterリンク