Dev Study
← Spring コース

7. Ant・Maven・Gradle・pom.xml・依存・Maven Central

は、ソースをコンパイルして や を作るまでの作業を、コマンド1つで順に実行する道具です。このコースに出てくるのは 、、 の3つです。Node で役割が近いのは npm と、package.json の scripts に書いた tsc や nest build です。ただし npm は Node に付いてきますが、Maven や Gradle は に入っていません。

違いは、何を自分で書くかです。Ant は手順をすべて に書き、依存(自分のコードが使うライブラリ)は取ってきません。Maven は置き場所と手順を規約で決めてあり、 に依存を(グループ名・名前・版の3つ組)で書くと、 という公開の置き場から JAR を取ってきます。Gradle は Maven と同じ配置と公開の置き場を使い、設定を に書きます。

pom.xml は package.json に近いのですが、当たらない点があります。取ってきた JAR は node_modules のようにプロジェクトの中には置かれず、ホームディレクトリの に全プロジェクト共用で入ります。scripts に当たる欄もありません。出力先の名前も道具ごとに違い、既定では Maven が 、Gradle が です。Ant では自分で決めます。

点線の付いた語はタップすると説明が出ます。用語集を開く →

3つのビルドツールと、依存が手元に来るまで(右の → は Node で近いもの)
Antbuild.xml に手順を全部書く。依存は取ってこない
Mavenpom.xml に座標で依存を書く。置き場所と手順は規約
Gradlebuild.gradle に書く。配置と公開の置き場(Maven Central)は Maven と同じ
Maven と Gradle: 座標で書いた依存を取りに行く
Maven Central公開の置き場。JAR と POM が置かれている
Node: npm の公開レジストリ
初回に取ってきて、手元に溜める
~/.m2/repositoryMaven のローカルリポジトリ。全プロジェクト共用
Node: node_modules ではない(プロジェクトの外)
コンパイルして成果物を作り、出力先に置く
target/Maven の出力先
Node: dist/
build/Gradle の出力先
自分で決めた名前Ant の出力先
  • ・下のコードは、ビルドツールがしていることの芯(手順を前提から順に、1回ずつ実行する)を素の Java でなぞった模型です。Ant や Maven の実装ではありません
  • ・自己紹介の言葉では、Maven は「Java のプロジェクトのためのビルドツール」、Gradle は「オープンソースのビルド自動化ツール」です(Maven 公式サイトと Gradle 9.7.1 の利用者向け手引き)
  • ・POM は Project Object Model の略で、Maven のプロジェクトを XML で表したものです。それを収めたファイルが pom.xml です(Maven の POM リファレンス)
  • ・Maven Central の場所は https://repo.maven.apache.org/maven2 です。Gradle もここから取れますが、手元の置き場は ~/.m2 ではなく ~/.gradle の下でした(Gradle 9.7.1 での実測)
  • ・スコープ(その依存をいつ使うか)、SNAPSHOT(開発中の版の印)、ラッパー(mvnw や gradlew。決まった版の道具を取ってきて実行するスクリプト)は、サンプル集の早見表にまとめました
  • ・同じ語が別の意味で出てきます。Ant の target は build.xml の中の手順のまとまり1つで、Maven の出力フォルダ target/ とは別物です。Maven のスコープ(依存をいつ使うか)も、npm のパッケージ名 @scope/name のスコープとは別物です
  • ・Maven が規約で決めた手順の中身と、Ant で手順を書く実物は、後のレッスンで扱います

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Java

図やコードに出てくる用語(タップで説明)

サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗