[背景]
なんとなく使えるレベルを脱却したいため
#❏Mavenとは
Apache Software Foundationで開発されているプロジェクト管理ツール
####基礎となる考え方
project object model
- プロジェクトのライフサイクルをオブジェクトとみなして管理するモデル
- これらの定義(オブジェクトの中身)をpom.xmlに書き出して管理している
- 継承可能なのでsuper-pomの配下に差分として子pomを記述する方式が一般的
- 親pomの内容は変数置換が可能(重複管理を防ぐ)
- これらの値はproject.ファイルに記述することで一元管理が可能
#❏pom.xmlとは
- プロジェクトの設定をxmlのタグとして記述している
- プロジェクト≒オブジェクトとするモデル
- ↑より、プロジェクトの属性・振る舞い・関係性・識別子を定義したファイルといえる
参考:https://www.itmedia.co.jp/im/articles/0211/12/news001.html
##中身
<!-基本設定->
・modelVersion
pomのモデルバージョン:pom記述方法のバージョン値
・groupId
そのプロジェクトの製作者や会社・団体名
・artifactId
プロジェクトに割り当てる固有のID
・version
プログラム(プロジェクト)のバージョン
・packaging
パッケージングの種類
・name
プログラム名
・url
プロジェクトに関連するwebサイトのアドレス
<!-ビルド設定->
・sourceDirectory
input要素の指定
・outputDirectory
output要素の指定
・plugins
プラグインの指定により拡張性の高いビルドを実施
<!-ライブラリ関連->
・dependencies
依存ライブラリを定義する
ここに記述することで、mavnがセントラルリポジトリからjarを自動で取得してくれる
・dependency
一つの依存ライブラリを定義
・groupId:依存ライブラリの作成者
・artifactId:識別子
・version:ライブラリのバージョン
・scope:ライブラリが使用される範囲を定義
・exclusions:プロジェクトが依存ライブラリが持つ依存関係を無視する指定
<!-その他環境設定->
・pluginRepository
取得元のリポジトリを複数指定する場合に指定
参考:http://maven.apache.org/pom.html
#❏各種オペレーションについて
コマンド | 内容 |
---|---|
mvn install | 作成した(若しくはmavenリポジトリにない)jarファイルをローカルリポジトリにインストール →他依存モジュールが新たなjarを参照できるようにするために使う |
mvn package | JAR.WAR等の成果物を生成する |
mvn eclipce:eclipce | Eclipse 用のファイル(.classpath,.project)を作成する。 →どちらもEclipseが内部で使用していると思われる ※binディレクトリはコンパイルによって作成されたクラスファイルが含まれる |
mvn clean | 依存関係を更新するために、初期化する処理 |
#❏その他
###setting.xml
・mavenが実行するデフォルト設定を記述するファイル
・ローカルリポジトリの位置等を指定
mirrorとは?
・ミラーリポジトリを指定するためのタグ
・mavenへのアクセスが集中しないようにmirrorリポジトリがいくつも存在
・それらを指定することで、mvn処理の高速化などが図れる
###各種プラグイン
maven-resources-plugin
・必要なタイミングでリソースファイルを特定のディレクトリにコピーする機能
・コンパイル後targetに配置された実行可能ファイルが同target/resourceを見るため必要
・参考:https://blog.chocolapod.net/momokan/entry/84
maven-compiler-plugin
・コンパイルのプラグイン(デフォルト)
maven-dependency-plugin
・指定されたディレクトリーは以下に依存関係(ライブラリ)をコピーして配置する。
・通常はtarget/libに集められる。(Eclipseの場合)
※targetファイルは実行可能ファイル群を集めておく(実行時にはsrcではなくこちらが使われる)
参考:https://qiita.com/tontan9616/items/d8427504e82c68be3b03
[その他]
課題:pomのバージョン管理をどのようにやっていくのか?