第1章
構成管理入門  

第2章
Subversionによるバージョン管理入門

第3章
Subversionベストプラクティス

第4章
Maven2によるビルド入門

第5章
Maven2ベストプラクティスリリースの自動化

第6章
リリースの自動化

Appendix
Maven 2はまり道


※WEB+DB PRESS Vol.39掲載の記事を載せています。

Appendix Maven2はまり道

Authors:BABA Yasuyuki

はまりその5 クリーンなビルドを

これから実装する機能で使いたいメソッドが、依存ライブラリの新しいバージョンにありました。 そこで、依存ライブラリのバージョンを上げて機能を実装し、mvn packageコマンドでWARファイル を生成してアプリケーションサーバに配備しました。
ところが、実際に動かしてみるとNoSuchMethodErrorが発生してしまいました。 よくよく確認してみると、サーバのWEB-INF/libに、依存ライブラリのJARファイルが新旧の2つ存在していま した。そんな状態だとJARファイルのロード順によって、うまく動いたり動かなかったりします。 今回は、このうち古いほうが先に読み込まれたためNoSuchMethodErrorになってしまったようです。
Maven 2は成果物を生成するときに、変更があったリソースだけを処理しようとします。 そのため、普通にフェーズを指定してビルドすると、以前ビルドしたときのファイルがtargetディレクトリ に残ったままでビルドを進めます。 今回の場合は依存ライブラリのバージョンを上げる前にビルドしたときにtarget/WEB-INF/libに古いバージ ョンのJARファイルがコピーされ、依存ライブラリのバージョンを上げてビルドしたときは新しいバージョン のファイルが追加でtarget/WEB-INF/libにコピーされたため、WARファイルに2つのバージョンの JARファイルが混在してしまったようです。
そんなときはmvn cleanコマンドで出力先のファイルを消してからビルドしてください。 最終的に本番で動く成果物を作るときや、結合テストで使う成果物を作るときなどはmvn clean packageコマンドのように、必ずcleanを付けてクリーンなビルドをすることをオススメします。