Mavenの使い方


 * 整理箱
 * 整理箱 ソフトウェア開発

Mavenを使う利点

 * 自分が書いているプログラムが依存するライブラリを自動的にダウンロード、インストールしてくれる.
 * たくさんのライブラリを使う場合に非常に楽. いちいちjarファイルを１つ１つ探して、ダウンロードしてくる手間が無い.
 * 複数人で開発しているときにライブラリのバージョンがずれて動作が少し違ってしまう、といったことがおこらない.
 * 誰でもsubversionリポジトリからチェックアウトしたら、すぐに開発、コンパイル、実行ができる.
 * ディレクトリ構造などの雛形を作ってくれる. => 作法を一度覚えれば、どこに何があるか、わかりやすい.
 * 継続的インテグレーション

普通のプログラムの作り方 (command line)
1. 雛形ディレクトリの作成 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app

すると、つぎのようなファイルが生成される. (artifactId, groupIdの役割に注意) $ tree . `-- my-app |-- pom.xml (<=設定ファイル) `-- src |-- main |  `-- java |      `-- com |          `-- mycompany |              `-- app |                  `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java

2. 設定ファイルpom.xmlの編集

"nearest definition" means that the version used will be the closest one to your project in the tree of dependencies, eg. if dependencies for A, B, and C are defined as A -> B -> C -> D 2.0 and A -> E -> D 1.0, then D 1.0 will be used when building A because the path from A to D through E is shorter. You could explicitly add a dependency to D 2.0 in A to force the use of D 2.0
 * JDKのバージョンとmavenの設定
 * 依存ライブラリがセントラルリポジトリに無い場合
 * JUnit 3.xではなくJUnit 4.xをつかう場合 (=> 単純なプログラムのためのpom.xmlの雛形参照)
 * 依存ライブラリのどのバージョンがつかわれるかは以下のルール(nearest definition)で決まっている.

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

pom.xml内の の並び順も大事. 先に並んでいる物が優先される. （深さ優先）

3. 普通にプログラムを書く.

eclipseでプログラムを書く場合は、以下のようにすることでeclipseのプロジェクトとして認識されるようにする. mvn eclipse:eclipse

4. compile, test, package また、one-jar（すべての依存するjarファイルを固めたもの）をつくるには、 以下のようにmaven-assembly-pluginを使うとよい.

mvn assembly:assembly -DdescriptorId=jar-with-dependencies

固まったjarファイルを使うときには以下のようにすると、指定したクラスのmain関数が実行される. (依存するjarファイルすべてにclasspathを通す必要がなくなる） java -cp $JAVA_LIB/RGM3-0.1-jar-with-dependencies.jar oga.rgm2.cran.CranContrib

5. Maven/Javadocを作る.

普通のプログラムの作り方(eclipse)

 * Eclipseにプラグイン(m2eclipse)をインストール
 * Eclipse+m2eclipseでmavenで管理されたプロジェクトを作成する
 * New => (Other) => Maven　の下のダイアログボックスを呼びだすことにより、新しいmaven archetypeでプロジェクトを開始する. 

Using platform encoding
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

以下のようにencodingをpom.xmlに書いてやる.

Unable to get resource ... Authorization failed
[WARNING] Unable to get resource 'commons-digester:commons-digester:pom:2.0' from repository private-webdav-repository (dav:http://www.oga-lab.net/maven2): Authorization failed: Not authorized.

.m2ディレクトリの下にsettings.xmlを書いてやる.