Maven 試してみる③ ビルド編

ビルドしてみようぜ


前回作成したプロジェクトはこのような構成だった。
ここで構成されたApp.java、AppTest.javaは、HelloWorldが書かれただけなので、以下のような簡単な、足し算引き算の計算プログラムに書き換える。

App.java

package jp.co.sado;

/**
* 計算プログラム
*
*/
public class App {
public static void main(String[] args) {
App app = new App();
System.out.println("1+2" + app.add(1, 2));
System.out.println("5-3" + app.minus(5, 3));
}

public int add(int x, int y) {
return x + y;
}

public int minus(int x, int y) {
return x - y;
}

}

AppTest.java
package jp.co.sado;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {

public void testAdd() {
App app = new App();
assertEquals(3, app.add(1, 2));
assertEquals(0, app.add(0, 0));
assertEquals(66666, app.add(12345, 54321));
}

public void testMinus() {
App app = new App();
assertEquals(3, app.minus(5, 2));
assertEquals(-3, app.minus(2, 5));
assertEquals(111, app.minus(321, 210));

}
}

このコードが編集し終わったら、やり方は簡単。
mvn package
上記1行のコマンドを打つだけです。これだけで以下のようなログが出力して、コンパイル、テスト実行、パッケージングが行われる。
Running jp.co.sado.AppTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Thu Oct 20 20:57:49 JST 2011
[INFO] Final Memory: 9M/22M
[INFO] ------------------------------------------------------------------------

1行目はテスト結果で、jarファイルはcalc.-1.0-SNAPSHOT.jarという名前で「target」フォルダに作成される。

楽チンMaven


ともあれ、何が楽かというと、前回指定したアーキタイプに沿って、どこでどういうファイルを使うか、ビルドにはjavac,テスト実行にはJUnitを、パッケージングはjarファイルを使うといった情報が定義してあるので、開発者がいちいち明示的に指定しなくて良いということ。なので一行のコマンドで済んじゃうということです。
通常では、Antによるビルドスクリプトを作成して、自動化すると思うのですが、初めて使った印象としては、Antのスクリプトの記述より、仕組みがわかりやすいような気がします。学習コストが少なくすむかも?

依存ライブラリ管理


JUnitのライブラリを今回用意しなくても何故実行できたのでしょう?
これは今回、pom.xmlに依存ライブラリとしてJUnitを指定してあり、それをインターネットのセントラルリポジトリから自動でダウンロードしてくれたからです。定義しておけば、勝手にMavenさんが外からもってきてくれるってこと。
なので例えばライブラリのバージョンアップしたいときなど、pomを編集するだけでライブラリ管理ができちゃうということだ。pom.xml内をみると、タグの中にJUnitが定義されているのがわかる。

ただし、会社の先輩が言っていたのだが、このpom.xmlの編集が開発プロジェクトの規模によっては面倒だそうです。確かに依存ライブラリが追加されるごとに編集するのは面倒かもしれません。
この辺の考察はもうちょっと動かしてからしたいとおもいます。

次回は、レポート生成などをやりたいと思います。