ビルドライフサイクル

検証

プロジェクトに誤りがないかどうか、全ての必要な情報が利用可能かどうかを検証する。

1mvn valiate

コンパイル

プロジェクトのソースコードをコンパイルする。

1mvn compile

テスト

適切なユニットテスト用フレームワークを使用して、コンパイルされたソースコードをテストする。
ここで言う「テスト」とは、コードがパッケージあるいはデプロイされていなくても実行可能なものを指す。

1mvn test

パッケージ

コンパイルされたコードを、jarなどの配布可能な形式にパッケージする。

1mvn package

warを作るのもこのコマンドです。

インテグレーションテスト

パッケージ(された成果物)を、必要に応じてインテグレーションテストが実行可能な環境にデプロイ(配備)する。

1mvn integration-test

確認

パッケージ(された成果物)が妥当であり、品質基準に適合することを確認するためのチェックを実行する。

1mvn verify

インストール

ローカル環境で他プロジェクトの依存関係として利用できるように、パッケージ(された成果物)をローカルリポジトリにインストールする。

1mvn install

配備

インテグレーションもしくはリリース環境で実行され、他の開発者やプロジェクトと共有できるように、最終パッケージをリモートリポジトリにコピーする。

1mvn deploy

メモ

下位のビルドフェーズも実行する

インテグレーションテストやverifyは実行したことがなかったのですが、なんてことありません、あるビルドフェーズを実行すると、「下位に位置するすべてのビルドフェーズ」も同時に実行してくれるのです。

具体的に、次の感じです。

  • packageを実行すればvaliate、compile、test、packageを実行
  • deployを実行すれば、すべてのビルドフェーズを実行

clean

例えばpackageを行ってwarで、servlet-context.xmlなどのリソースを変更する場合に ファイルが上書きがされない というトラブルを何度も経験しました。
成果物を生成する場合は先にcleanを行うと吉です。

1mvn clean package
2mvn clean install
3mvn clean deploy

ビルドライフサイクルについては以下記事を引用いたしました。
ありがとうございました。

Undertree’s Lab
Mavenのビルドライフサイクル
http://undertrees-lab.blogspot.jp/2011/11/maven.html

flyway

初期設定

1mvn flyway:init

initしなくても、動く。
むしろinitしないほうが良いとどこかで見かけました。

マイグレーションの状態を確認する

1mvn flyway:info

マイグレートの実行

1mvn flyway:migrate

-Pオプションを指定してProfileを指定する。

失敗時のリペア

1mvn flyway:repair

mvn flyway:migrateがコケたときにリペアする。
リペアしたからといって直前の失敗マイグレートがロールバックするわけではないことに注意!

サーブレットコンテナ

pom.xmlにプラグインを設定してmvnからサーブレットコンテナが立ち上がるようにします。

Tomcatを起動する

1mvn tomcat7:run

Jettyを起動する

1mvn jetty:run

ここでも、DBなど接続先の切り替えに-Pオプションを指定してProfileを指定する。

実例

開発環境でのコマンド例
開発環境はリバースプロキシを併用し、プロジェクト上からJettyを立ち上げる。

1nohup mvn -P development -Djetty.port=8080 -Duser.timezone=Asia/Tokyo jetty:run > /dev/null &
  • AWSだとタイムゾーンが相違するため、起動オプションで指定
  • 複数のjettyを起動するため、ポート指定
  • nohupで処理をバックグラウンド実行
  • logbackでログ出力をしているので、jettyの起動ログは捨てる

その他

Profileの指定

pom.xmlに定義したプロファイルを指定する。

1mvn -P [profile_name]

いつも、どこでも使うオプションです。

jarファイルをリポジトリにinstallする

1mvn install:install-file -Dfile=path/to/lib/library.jar -DgroupId=[groupId]-DartifactId=[artifactId] -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true

Mavenで管理されていないライブラリを使用する時のコマンドです。

ビルド時のテストをスキップする

前述のとおり、package、install、deployの実行時にはテストも実行されますが、タイトなスケジュールの場合は ついついテストの修正を後回し にしてしまいがちですね。

そんな場合にテスト結果に目をつぶりたいときの対処方法で、いうまでもなく非推奨 ですよ。

A. テストの実行のみをスキップする

1mvn install -DskipTests=true

B. テストコードのコンパイル、およびテストの実行をスキップする

1mvn install -Dmaven.test.skip=true

テストのスキップは以下を参照いたしました。

tm_senda の技術ノート
http:// d.hatena.ne.jp/tm_senda/20120604/1338837404 現在は非公開 ?

Mavenリポジトリを指定する

コマンド実行時に参照するmvnローカルリポジトリを直接指定します。

1-Dmaven.repo.local=/path/to/repo

Mavenの読み方は?

Mavenを、はじめは[マービン]と呼んでいましたが、全然違いますね。
マーヴィン・ゲイはMarvin Gayeですし。はずかしい。。。

同僚に教えてもらい[メイヴン]と矯正しましたが、これもちょっと違うようで、、、

正解はメイヴェンのようですね。

Maven (Apache) の読み方について http://ryoichi0102.hatenablog.com/entry/2014/07/09/083452

間違えていても気にしないで堂々とする 」のが強く生きていくポイントです。

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Srirangan
出版社:アスキー・メディアワークス  発売日:2012-03-02

Amazonで詳細を見る

この記事の著者 Webrow (うぇぶろう)
Web アプリ開発、 Web 顧問 エンジニア、WordPress サポートいたします。