Mavenとは
こんにちは!
今日は、最近躓くことが多いMavenについて書いてみます。
Mavenとは
Project Object Model(POM)というプロジェクトの考え方(※1)に基づいてプロジェクトを管理するツール。
POMについて
基本的なPOMファイルは以下のようなものです。
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>com.example</
groupId
>
<
artifactId
>sample</
artifactId
>
<
packaging
>jar</
packaging
>
<
version
>1.0</
version
>
<
name
>Maven SAMPLE</
name
>
<
dependencies
>
<
dependency
>
<
groupId
>taka</
groupId
>
<
artifactId
>taka</
artifactId
>
<
version
>1</
version
>
<
scope
>test</
scope
>
</
dependency
>
</
dependencies
>
</
project
各要素の意味
modelVersion : POMのバージョン
groupId : プロジェクトを一意に識別する名前
artifectId : プロジェクトの成果物の名前
packaging : 成果物のパッケージングタイプ(jar、war、earなどがある)
version : プロジェクトのバージョン
name : プロジェクトの表示名
url : プロジェクトサイトのURL
dependencies : プロジェクトが依存するライブラリの情報
scope : 参照するタイミングを指定
POMには、親POMと子POMがあり、親POMの以下の要素は子POMに継承される。
- dependencies
- developers and contributors
- plugin lists
- reports lists
- plugin executions with matching ids
- plugin configuration
- groupId
- version
JARなどの成果物をまとめておく場所をMavenリポジトリという。
そして、Mavenリポジトリには、remote repositoryとlocal repositoryというものがあります。
※remote repositoryには、public repositoryとprivate repositoryというものが含まれています。
local repositoryとは
mvnコマンドを実行したマシンにあるdirectoryのこと。
デフォルトでは、.m2/repository フォルダが利用される。
他のrepositoryからダウンロードしたlibraryを保管したりするために使われる。
local repositoryへのインストール
mvn installによって、プロジェクトの成果物(JARファイルやソースコード)をlocal repositoryにインストールできる。
Mavenの内部的動作
基本的にMavenでは、ライブラリを取得する時にはlocal repositoryを確認して、そこになかった場合にremote repositoryを見にいく。
現在の疑問点(宿題)
・「mvn eclipse:eclipseとmvn installだと見にいく先が違う」という話を聞いた。それはどういうことか?
・mvn installは、gitでいうところのgit pullと同じような動き(remoteからlocalに持ってくる動き)だと思っていたが、そうなのか?
→ 調べてみたらmvn installは、remote repositoryに公開されていないlibraryをprivate repository(remote repository)にインストールするということらしいのでローカルに持ってくるとかそういうことじゃないみたい。
・意図的に特定のlocal repository、remote repositoryを見にいくのはどうやってやるのか?
読んでいただきありがとうございました。
まだまだ理解が足りないので、勉強してちゃんと理解できるようにします。(中途半端な完成度で申し訳ありません)
ぜひ、Mavenに関して間違っていることやもっと知っておいた方が良いことがありましたら教えていただけるとうれしいです。
※1Mavenが考える「プロジェクト」の構造は、以下のような構成です。
・プロジェクトが実施されている組織
・ソースリポジトリ
・開発者
・貢献者
・ライセンス
・依存ライブラリ
・成果物の構築
・各種レポート