プロジェクト管理ツールのmaveについて。環境について。osはwin7。JDK:1.7

■自サイト(バージョンはmaven3)
Mavenメモ2~eclipseプラグイン,よく使うコマンド,jenkinsと連携
jarファイル,manifest(マニフェスト)ファイル ~ mavenで生成

■インストール
mavenはバージョン2,3系があるみたいだけど、経験がないので2系を使ってみる。maven公式からapache-maven-2.2.1-bin.zipをダウンロード。zipを解凍して適当なディレクトリに配置。mavenのbinディレクトリをpathに通す。

C:\java>mvn --version

ERROR: JAVA_HOME not found in your environment.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation

mavenは環境変数JAVA_HOMEを設定する必要がある。JAVA_HOMEが設定できているかどうかはsetコマンドで確認できる。

C:\>set JAVA_HOME
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_21

再度、mvnコマンド。mvn -vでもおっけ。

C:\>mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.7.0_21
Java home: C:\Program Files\Java\jdk1.7.0_21\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows"

おっけ。
■コマンド(2系)
だいたい参考のtechscoreを見て試している。
>「mvn --help」「mvn -h」
⇒コマンド一覧が見れる。
>mvn archetype:create -DgroupId=hoge.example -DartifactId=sample
⇒mvnによるjavaプロジェクトの生成
>mvn compile
⇒コンパイル。デフォルトだとtargetディレクトリ下にクラスファイルが生成される。
>mvn test
⇒Unittestの実行。ドフォルトだと、targetディレクトリにtest関連のファイルが生成される。
>mvn package
⇒デフォルトだとtargetディレクトリ下にjarファイル生成。Jarファイル名はpom.xml に記述されている artifactId と version で決まる。
>mvn install
⇒外部jarファイルをローカルリポジトリにインストール。
⇒外部jarをローカルに落としてくるには、maven-dependency-pluginプラグインがpom.xmlに必要。
>mvn deploy
⇒作成したjarファイルをリモートリポジトリに配備する。pom.xmlファイルのprojectタグ下にdistributionManagementタグを書いておく必要がある。
>mvn clean
⇒プロジェクトのクリーン。targetディレクトリが削除される
javadoc生成、サイト生成などもできる。
maven2系基本コマンドのまとめ

>mvn dependency:tree
⇒pom.xmlファイルがあるディレクトリで実行すると、ライブラリの依存関係を確認できる。

例えば、下はstrutsのコアライブラリstruts-core.jar:1.3.10は、antlr,commons-beanutilsなど7つのライブラリに依存していることがわかる。こういう依存関係が管理されていることで、自動でライブラリを取得してビルドできる。

[INFO] +- org.apache.struts:struts-core:jar:1.3.10:compile
[INFO] | +- antlr:antlr:jar:2.7.2:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.8.0:compile
[INFO] | +- commons-chain:commons-chain:jar:1.2:compile
[INFO] | +- commons-digester:commons-digester:jar:1.8:compile
[INFO] | +- commons-logging:commons-logging:jar:1.0.4:compile
[INFO] | +- commons-validator:commons-validator:jar:1.3.1:compile
[INFO] | \- oro:oro:jar:2.0.8:compile
[INFO] +- org.apache.struts:struts-taglib:jar:1.3.10:compile
[INFO] +- org.apache.tomcat:servlet-api:jar:6.0.20:provided
[INFO] \- com.strutsbook:filter:jar:1.0:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL

■repositroyBrowser、ライブラリの依存性の指定方法。
pom.xmlファイルのdependencyタグの groupId, artifactId, version に指定する値の調べ方 については下。
The Central Repository(検索)
一覧
例えば、commons-langとcommons-long3 を検索してみる。commons-lang3のartifactIdはcommons-lang3、LatestVersionは3.1だということがわかる。2013/9/8現在。
この情報を参考にして、依存性の指定をする。

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
</dependency>

こっちの方が最新かな?
MVNRepositories
MVNRepositories home » org.apache.commons » commons-lang3 » 3.0

3.1.3.2. pom.xml で依存性の指定を行う
・リモートリポジトリにはないライブラリをローカルリポジトリにインストールとかもできる。sunの提供しているライブラリとか。

■maven初心者、入門者のためのおすすめ本の紹介(2系と3系)

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集/アスキー・メディアワークス
¥2,520
Amazon.co.jp

Apache Maven 2.0入門 Java・オープンソース・ビルドツール/技術評論社
¥2,499
Amazon.co.jp



■プラグインの設定
・mvnコマンドでは-Dオプション、pom.xmlでは<project>/<build>/<plugins>以下の<plugin>で指定する。
・プラグインの情報の調べ方は、maven公式のAvairable Pluginsページ あたりか。

例えば、compilerプラグインの場合
Apache > Maven > Plugins > Maven Compiler plugin > compiler:compile
Apache > Maven > Plugins > Maven Compiler plugin > Usage

・3.2.3. 実際にプラグインの設定を行う
ソースコードをjdk1.5でコンパイルする
jdkの指定はprojectタグのpropertiesタグで指定できるみたいだけどね

■リモートリポジトリの設定
リモートリポジトリの種類とリモートリポジトリの設定
⇒pom.xmlのprojectタグ下のrepositories/repositoryあたりで設定できるみたい

ライブラリの依存性の指定方法とプラグインの設定、mavenを使う上で必須。

■マルチモジュールプロジェクトついて
・親プロジェクトと各モジュールをそれぞれのpom.xmlファイルを用意して定義できる。
・親プロジェクトのpom.xmlファイルを各モジュールのpom.xmlファイルが継承しているようなイメージに近いかも。
・親プロジェクトのpom.xmlではmodules,moduleタグ、各モジュールのpom.xmlではparentタグを使う。

■eclipseとの連携
・上の■コマンド(2系)のmvn archetype:createコマンドでjavaプロジェクトを生成と書いたけど、この状態だとeclipse上で扱うことができない。「mvn eclipse:eclipse」コマンドを実行すれば、eclipseプロジェクトに変換してeclipseでも扱うことができる。このコマンドを実行した後に、eclipseのインポート⇒既存プロジェクトをワークスペースへでインポートできる。
・eclipseでmavenのプラグインを導入すれば、eclipse上でmvnコマンドを実行できるみたい。pom.xmlから実行できるってことかな。

■webアプリのmavenプロジェクト
通常のjavaアプリではなく、webアプリのmavenプロジェクトを作る場合、archetypeArtifactId パラメータで「maven-archetype-webapp」を指定する
ref:mavenによる実アプリケーション開発 or 本

>mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp

あとは、groupId,ArtifactIdなどを入力していけばプロジェクトのテンプレができる。mvn install でwarを作ってくれる。

■他
ref:MavenTips(techscore)
・pom.xml、setting.xmlの情報を得られる
・mvn ant:antでantのbuildファイルを生成できる。
ref:Maven Ant plugin
・「mvn dependency:copy-dependencies -DoutputDirectory=lib」で依存ライブラリ(外部jarファイル)を指定ディレクトリにコピーできる
・maven-assembly-pluginで配布用のアーカイブを生成できる。
・maven-antrun-pluginでantのタスクを実行できる。

■参考
maven(techscore)
今さらかもだけどMaven入門してみた(1) - メリット、環境構築

■題材
ログとか。slf4jクワガタ