1.2 Mavenの原則

1.2 Mavenの原則

Mavenは4つの原則を持ちます。

  • Convention over configuration(設定よりも規約)
  • Declarative execution(記述的な実行?)
  • Reuse of build logic(ビルドロジックの再利用)
  • Coherent organization of dependencies(依存性の管理)

これらはクリストファ・アレクサンダーのパターンの影響を受けているそうです。

1.2.1 Convention over configuration

はじめにRailsの話を引用してConvention over configurationを説明しています。
要点としてはMavenでは以下のような標準的な規約を提供しているということです。

  • プロジェクトのための標準的なディレクトリ構成

Mavenではディレクトリ構成の標準を提供していているということです。
それに従えば、無駄に悩むこともないし、他の人がプロジェクトを見たときにも理解しやすいということでした。
#まあ他のツールによってディレクトリ構成を変えざるを得ない時はあると思いますが。

  • 一つのMavenプロジェクトは一つのアウトプット

アウトプットが異なるなら別のプロジェクトにしたほうが良いということです。
複数のアウトプットを出す場合は目的や解決策もぶれやすいからというのが理由としてあるようです。
プロジェクトの連携もMavenならやりやすいというのもあると思います。
# 何を持ってアウトプットと呼ぶかがまだ良くわかりません…。JavaDocやテストリポートとかは副産物的な扱いなんでしょうか?

  • 標準的な命名規約

Jarの名前を「ライブラリ名-バージョン番号.jar」にするなどファイルやディレクトリの命名規約を決めているということです。
#他にもソースは「ライブラリ名-バージョン番号-sources.jar」、JavaDocは「ライブラリ名-バージョン番号-javadoc.jar」というものありますね。

1.2.2 Reuse of build logic

#1.2の時と順番違うんですけど…まあ良いや。
Mavenでは色々な役割のプラグインが用意されていて、それらのプラグインはProject Object Model(POM)からの入力によって実行されるということです。

1.2.3. Declarative Execution

Mavenのビルドの実行はPOMによって制御されていて、Mavenでは全てのPOMの親に当るデフォルトのPOMを定義しているということです。
pom.xmlの例やビルドライフサイクルも出てきますが、後で詳しくやると思うので飛ばし。

1.2.4. Coherent Organization of Dependencies

依存するものを定義しておくだけで、リポジトリからJARファイルなどを取得してきます。
依存するものはgroupId、artifactId、versionで区別され、artifactと呼ばれています
またリポジトリはローカルとリモートに存在し、必要なartifactがローカルに存在しない場合はリモートリポジトリから取得し、ローカルリポジトリに格納します。
複数のプロジェクトから参照される同じartifactはローカルリポジトリで共有されます。