-antに変わるビルドツールとして急成長中。とはいってもantも完全に駆逐されたわけじゃないけどね。

#contents

*基本概念 [#j27ab3dc]

プロジェクトで必要となるタスクをMavenが定義する各フェーズ(プロジェクト作成、コンパイル、テスト、ドキュメント、パッケージング)で実施できるようにしている。

各フェーズはmavenプラグインで実装されており、初回実行時にダウンロードするためネットワーク接続が必要。

|プロジェクト作成|mvn archetype:create|
|クリーン|mvn clean|
|コンパイル|mvn compile|


*インストール [#m2e6660d]

Javaとmvnへのパスが通っていればよし。Eclipseならm2e(昔のm2eclipse)が標準。J2EEパックなら標準インストール済み。m2eを使うときにはm2eプロファイルが自動的に読まれる。

*pom.xmlの記載 [#b63e739e]

**基本情報 [#z8728243]

**変数の定義と利用 [#uab16306]

    <properties>
        <arbitrary.property.a>This is some text</arbitrary.property.a>
        <hibernate.version>3.3.0.ga</hibernate.version>
    </properties>
    ...
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>${hibernate.version}</version>

-settings.xmlにpropeties定義できるところがあって、別ファイルに持たすことも可能。

**profileの指定 [#i0d5434b]

mvn help:active-profilesで現状有効なprofileを見ることができる。

 <profile>
  <id>profile-A</id>
  <properties>
    <value>AAA</value>
  </properties>
 </profile>
 
 <profile>
  <id>profile-B</id>
  <properties>
    <value>BBB</value>
  </properties>
 </profile>

**リポジトリ情報 [#u81855ac]

3種類定義する。

+ダウンロードリポジトリ
+パッケージを作成したときにアップロードするリポジトリ
+プラグインのダウンロードリポジトリ

三種類なので一か所だけ変更しても、残りは変更されておらずはまったので注意。

**ローカルリポジトリ [#d6de3abc]

デフォルトはユーザーの.m2だが、settings.xmlで設定可能

 <localRepository>/path/to/local/repo</localRepository>

**Eclipse上での操作 [#t584a242]

***既存プロジェクトをmavenプロジェクトに変更 [#g652987d]

右クリックして構成→convert to maven project

***新規作成 [#i689ee35]


右クリックして新規作成→Maven→Maven Project

*プラグイン [#n4c77927]

**maven-release-plugin [#bf1d00ee]

pomのバージョンアップやタグの設定を自動でやってくれるプラグイン

http://www.nulab.co.jp/kousei/chapter6/05.html


-pluginを取ってくるrepositoryはplugin-repositoryとして別に定義する。jarの配置先もDistribution Repository。setting.xmlでもリポジトリ定義できるけど、実行環境ごとに設定する羽目になるのでお勧めしない。

|wagon|ファイル転送プラグイン|
|release|リリース作業用プラグイン|
|resource|リソースファイルコピーや文字列置換|
|exec|コマンド実行|

*注意点など [#l17c5f17]

特別な設定をしない限り、jarファイルをネット経由で持ってくるので接続が必要。

*主要操作など [#l4882bbb]

**プロジェクト作成 [#gec98655]

-下記コマンドでディレクトリ構成含め勝手に作ってくれる

 mvn archetype:create -DgroupId=com.rutake.sample -DartifactId=app -Dversion=0.0.1

**コンパイル [#b0135ff3]

-テストコンパイルするにはappディレクトリに移動して以下のコマンド

 mvn compile

バージョンの指定はプロパティで行う。

maven.compiler.source, maven.compiler.target

**テスト [#gedd4ae5]

-JUnitテストするには

 mvn test

**パッケージ作成 [#nc81a40d]

 mvn package

**リリース [#f79b28dc]

-ローカルリポジトリにリリースしてみる
 mvn install

どのコマンドも初回実行時には関連jarをごっそりダウンロードするので時間はかかる。二回目以降は早い。

**リモートリポジトリに配備 [#n41fc747]

-インストール先の情報はdistributionManagementセクションで定義しておく。

 mvn deploy

**eclipseプロジェクト作成 [#k4904694]

 mvn eclipse:eclipse

**どのprofile,pom,settingsが有効なのか出力 [#he3d7e2b]

 mvn help:active-profiles
 mvn help:effective-pom 
 mvn help:effective-settings

settings.xmlは~/.m2におかないと自動では読み込んではくれないので注意。


**リポジトリのタイムアウト設定 [#j18321a6]

http://d.hatena.ne.jp/Kazuhira/20130623/1371978072

*文字列置換 [#xdcc2225]

フィルタリングという。以下のURLを参照せよ

http://www.limy.org/program/java/maven/filtering.html


*TIPS [#u28415a0]

|テストをスキップする|mvnコマンドに、 -Dmaven.test.skip=true を加える。|
|メモリの調整|環境変数MAVEN_OPTS=-Xmx512mを設定する。デフォルトは256M|

*トラブルシューティング [#p0d0c9d3]

|内容|対策|
|Missing artifact||
|jarが古いまま|バージョンが同じだと新しいのを取得しないので、ローカルのjarを消す|
|resolution will not be reattempted until the update interval of xxx|ローカルキャッシュの有効期限が切れるまでローカルを見続けるのでローカルキャッシュを消す|
|リポジトリを変更したのに旧リポジトリを見に行く|ローカルキャッシュが原因の可能性が高い.lastUpdatedファイルを消すともう一度リモートリポジトリにアクセスしに行く|

*リポジトリの検索 [#n491dc7a]

http://mvnrepository.com/

*用語など [#af2685e7]

|用語名|説明|備考|
|artifactId|成果物のこと|人工物の意味から来ているらしい|
|groupId|パッケージ階層とほぼ同じ||
|プロジェクトサイト|mavenにて自動生成できるHTMLページ|JavaDocやテストカバレッジ|
|Apache archiva|複数のmavenリポジトリをまとめるProxy的役割を果たす|
|nexus|archivaと同じく、複数のmavenリポジトリをまとめるProxy的役割を果たす|

*リポジトリソフト [#c86b3435]

Archiva,sonatype nexus,Artifactoryがある。比較表がある。

http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Feature+Matrix 

**nexus(sonatype nexus) [#q4b0395e]

-インストール手順

warバンドルがなくなってしまった。nexusディレクトリ以下をTOMCAT_HOME/webappsに突っ込んだが、NoClassDefFoundErrorが出たので、上位のlibディレクトリのjarをnexus/WEB-INF/libにつっこんで起動したところ無事成功。ユーザーディレクトリにsonatype-workディレクトリを作るので注意。またコンパイルバージョンがかなり最新のものを使っているのでJDK6の場合は2.5までしか使えない。

環境変数PLEXUS_NEXUS_WORKでワークディレクトリの設定をする

**リポジトリの設定 [#lf83329d]

Proxy,3rdParty,Hosted,Virtualの種類がある。
一般公開されているリポジトリのProxyとして使うならProxyだが、初期状態で設定されているので特に追加は不要だろう。「Download Remote Indexes」の設定をTrueにしておくとNexusの動いているマシンにダウンロードしておいてくれる。OracleのODBCドライバのような一般公開リポジトリに存在しない場合は3rdParyリポジトリに手動でアップロードする。自作のアプリのアップロード場所はHostedにする。




#counter


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS