DATE : 2006/12/01 (Fri)
Maven の各フェーズには、ゴールが設定されています。
例えば、compile フェーズには compiler:compile ゴールが、package フェーズには jar:jar ゴールが標準で設定されています。
ここで以下のように pom.xml の設定を行うと、phase 要素のフェーズに goal 要素に示したゴールが実行されます。
... <build> <plugins> ... <plugin> <groupId>プラグインのgroupId</groupId> <artifactId>プラグインのartifactId</artifactId> <executions> <execution> <id>実行する処理を区別するためのID</id> <phase>処理を実行するフェーズ名</id> <goals> <goal>実行するゴール</goal> <goal>(複数記述可)</goal> </goals> <configuration>この処理でのプラグインの設定</configuration> </execution> <execution>(複数記述可)</execution> </executions> </plugin> ... </plugins> </build> ...
特別な設定が必要ない場合、configuration 要素は省略できます。
テストコードを収めた JAR ファイルを作成する jar:test-jar ゴールを test フェーズに実行するには、次のように記述します。
... <build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>create-test-jar</id> <phase>test</phase> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build> ...
goal 要素に指定しているのは「jar:test-jar」の「:」以降の部分であることに注意してください。「maven-xxx-plugin」の xxx 部分は、標準では「:」以前の部分と自動的に解釈されます。そのため、goal 要素には「:」以前の部分は書きません。
標準では、test フェーズには surefire:test ゴールが設定されています。そのため surefire:test ゴールの後に jar:test-jar ゴールが実行されます。
なお、phase 要素も省略することができます。phase 要素を省略すると、実行はそのゴールに関連付けられたフェーズで行われます。例えば、jar:test-jarのページには、次のような記述があります。
Automatically executes within the lifecycle phase: package
つまり phase 要素を省略すると、jar:test-jar ゴールは package フェーズで実行されることになります。
関連記事
参考文献
- Introduction to the Build Lifecycle
- POM Reference 3.1.1.2 Plugins
- Introduction to Plugin Prefix Resolution
DATE : 2006/11/30 (Thu)
( 'A`)BREW って大変ですね。
(;^ω^)BREW を使った企画の開発も中盤に差し掛かったわけですが、さすがに中盤ともなると BREW 独特の考え方を理解していないと詰まってしまう部分が多くなってきました。
('A`)その割には、BREW の資料が日本語、英語含めて少ないんですよね。
(;^ω^)まあ、ぼちぼち進んではいるので、なんとかなっているとは思いたいのですが。
ちなみにもうひとつ、JSF を使った企画の方も進んでいます。こちらは Apache Maven を導入してからプロジェクト管理も楽になったので、軌道に乗っています。
(;^ω^)ウェブアプリケーションの場合、依存ライブラリがものすごく多くなるんですよね。そしてその依存ライブラリの依存しているライブラリまで手動で管理することを考えると、頭が混乱しそうになります。
( ´∀`)その点、pom.xml に記述しておけば自動的に(リモートリポジトリに登録してあれば)ライブラリがダウンロードされる Maven は楽で良いですね。
( 'A`)もっとも、きちんと設定してあげないと時々融通の聞かないときがあるのが玉にキズですが。
DATE : 2006/11/29 (Wed)
BREW で取得できる方位や進行方向の0度は、
通常の方位磁針が指す0度は磁北です。一般に「北」と言うと、北極点に向かう方角のことを言います。しかし、地球の磁場は地軸とずれており、さらに地域によってゆがんでいます。そのため、北極点に向かう方角を真北、地磁気の北を指す方角を磁北と言います。
BREW で取得できる方位は BREW API ドキュメントの IPOSDET_GetOrientation 関数の項目に書かれています。
そして IPOSDET_GetGPSInfo 関数で取得できる進行方向は TIA/EIA IS-801規格(PDF)に準拠しています。この規格書の P.3-48 に、次のような記述がありました。
0 degrees is True North and the angle increases toward the East.
ここから、BREW の方位・進行方向の0度は真北(True North)を指すことが分かります。
参考文献
DATE : 2006/11/28 (Tue)
Eclipse などの IDE では依存するライブラリやプロジェクトのソースコードを参照することで、そのクラスやメソッドに関するドキュメントを表示しています。
IDE で Maven を使って複数のモジュールからなるプロジェクトを開発していると、モジュール同士は Maven のローカルリポジトリを経由して参照しあうことになります。
しかしモジュールをローカルリポジトリにインストール(install フェーズを実行)すると、クラスファイルの JAR はインストールされますが、ソースコードはインストールされません。そのため、依存するモジュールのドキュメントが IDE 上で表示されないという現象が発生します。
そこでモジュールの pom.xml に設定を行い、install フェーズ実行時にソースコードもインストールされるようにします。(「...」は省略を表します)
... <build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build> ...
maven-source-plugin は、IDE 用などにソースコードを JAR 形式にまとめるプラグインです。このプラグインの source:jar ゴールを実行すると、テストコードを除いた全ソースコードが JAR 形式に圧縮されます。
そのため source:jar ゴールを実行するように設定すると、 install フェーズの実行中にゴールが実行されます。
<execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution>
ちなみに source:jar ゴールは標準では package フェーズに関連付けられています。install フェーズを実行すると、その直前に package フェーズの処理も行われるので、ソースコードのインストールも行われるというわけです。
なお、上の例はモジュールひとつに限定した話です。プロジェクトの全モジュールでソースコードをインストールする場合は、プロジェクト最上位の pom.xml に次の設定を行います。
... <build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <inherited>true</inherited> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build> ...
inherited 要素を有効にしました。この要素を有効にすることで、子モジュールにここで設定した maven-source-plugin の設定が受け継がれます。
なお、最上位の pom.xml の設定は、その pom.xml 自身がローカルリポジトリにインストールされなければ有効になりません。そのため、上の設定を終えた後は install フェーズを実行して pom.xml をインストールします。
参考文献
DATE : 2006/11/26 (Sun)
BREW では機種によって CPU が異なるため、エンディアンが固定ではありません。そのため、バイナリデータを機種に依存せずに扱うには、エンディアンを機種に合わせて内部で変換しなければなりません。
機種のエンディアンに変換するには、以下のマクロ関数を使用します。(以下は BREW 3.1.2 API リファレンスから抜粋したものです)
- uint16 NTOHS(uint16 us)
- unsigned long NTOHL(unsigned long ul)
「N」はネットワークバイトオーダを表し、「H」は機種(ホスト)のエンディアンを表します。つまり「N」TO「H」とは、ネットワークバイトオーダから機種のエンディアンに変換する関数であることを表しています。
なお、ネットワークバイトオーダはビッグエンディアンとされています。そのため、バイナリデータをビッグエンディアンとしておけば、これらの関数を介すことで機種のエンディアンへの依存を防ぐことができます。
ところで、リファレンスを見るかぎりでは、NTOHS の扱うビット数は16ビットと定義されていますが、NTOHL は定義されていないように見えます。
しかし、NTOHL の定義(AEEStdLib.h)を覗いてみると、uint32 と定義されていました。
そのため、以下のように見なしても問題ないと思います。
- uint16 NTOHS(uint16 us)
- uint32 NTOHL(uint32 ul)
(逆に機種のエンディアンからネットワークバイトオーダに変換するマクロ関数もありますが、この記事では触れません)