Maven 試してみる③ ビルド編
■ ビルドしてみようぜ
前回作成したプロジェクトはこのような構成だった。
ここで構成されたApp.java、AppTest.javaは、HelloWorldが書かれただけなので、以下のような簡単な、足し算引き算の計算プログラムに書き換える。
App.java
package jp.co.sado;AppTest.java/**
* 計算プログラム
*
*/
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;
}}
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.AppTest1行目はテスト結果で、jarファイルはcalc.-1.0-SNAPSHOT.jarという名前で「target」フォルダに作成される。
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 secResults :
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] ------------------------------------------------------------------------
■ 楽チンMaven
ともあれ、何が楽かというと、前回指定したアーキタイプに沿って、どこでどういうファイルを使うか、ビルドにはjavac,テスト実行にはJUnitを、パッケージングはjarファイルを使うといった情報が定義してあるので、開発者がいちいち明示的に指定しなくて良いということ。なので一行のコマンドで済んじゃうということです。
通常では、Antによるビルドスクリプトを作成して、自動化すると思うのですが、初めて使った印象としては、Antのスクリプトの記述より、仕組みがわかりやすいような気がします。学習コストが少なくすむかも?
■ 依存ライブラリ管理
JUnitのライブラリを今回用意しなくても何故実行できたのでしょう?
これは今回、pom.xmlに依存ライブラリとしてJUnitを指定してあり、それをインターネットのセントラルリポジトリから自動でダウンロードしてくれたからです。定義しておけば、勝手にMavenさんが外からもってきてくれるってこと。
なので例えばライブラリのバージョンアップしたいときなど、pomを編集するだけでライブラリ管理ができちゃうということだ。pom.xml内をみると、
ただし、会社の先輩が言っていたのだが、このpom.xmlの編集が開発プロジェクトの規模によっては面倒だそうです。確かに依存ライブラリが追加されるごとに編集するのは面倒かもしれません。
この辺の考察はもうちょっと動かしてからしたいとおもいます。
次回は、レポート生成などをやりたいと思います。