読者です 読者をやめる 読者になる 読者になる

似非プログラマのうんちく

「似非プログラマの覚え書き」出張版

Apache Maven を使ってみよう(その 2)

Maven のビルドライフサイクル

Maven のビルドライフサイクルには多数のゴールが設定されている。ちなみにデフォルトのライフサイクルには何と

validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy

こんなにゴールが設定されている。

しかし、実際にはこれを全部使うことはない。以下、主だったものを説明する。

準備

自動生成したプロジェクトに用意されている Javaソースコードを少し修正する。

App.java

package jp.mydns.akanekodou;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

こちらはインデントのスタイルを少し手直ししただけ。

AppTest.java

package jp.mydns.akanekodou;

import org.junit.Test;
import static org.junit.Assert.assertTrue;

/**
 * Unit test for simple App.
 */
public class AppTest {
    /**
     * Rigorous Test :-)
     */
    @Test
    public void testApp() {
        assertTrue(true);
    }
}

こちらは JUnit4 向けに大幅に修正した。そのままでも問題ない(JUnit4 の jar の中に JUnit3 のライブラリが含まれているため)が、後々のことを考えて書き直しておく。ちなみにテストコードを書いたことがある人ならすぐにわかると思うが、このテストは自動的に成功し、実質何のテストも行っていない*1

主なゴールについて

ゴール 説明
validate 全てのプロジェクトの情報が揃っていて正しいことをチェックする。
compile ソースコードコンパイルする。
test-compile テストコードをコンパイルする。
test テストを実行する。
package コンパイルされたコードを配布形式にまとめる。
integration-test 統合テスト環境でパッケージを処理する。
verify パッケージが有効なことを確認するチェックを行う。
install ローカルリポジトリにパッケージをインストールする。
deploy リモートリポジトリに最終的なパッケージを公開する。

これは順番に実行する必要は無く、あるフェーズを実行するとそれに先行するフェーズが自動的に処理される。これが前回説明した「ビルドライフサイクルの自動化」である。

なお、これとは別にクリーンライフサイクルに clean などのゴールが設定されている。clean は以前のビルドが生成したファイルを全て削除するものである。

Eclipse からビルドライフサイクルを実行する

Eclipse からもいくつかのビルドライフサイクルを実行することができる。例えば test を実行したければ、Maven プロジェクトを右クリックして [Run As] → [Maven test] をクリックすればよい。

どうやって main を実行するの ?

Eclipse を使っているなら、普通に(?) App.java を [Run] で動かして実行できるが、Maven から実行することはできないのだろうか。実はそのためには Maven 向けに用意されたプラグインが必要になる。それは次回に。

*1:最初から用意されているテストコードについても、同じく実質何のテストも行わないコードである。