Maven Wrapper vs Gradle Wrapper: CIでの再現可能なJVMビルド
これらは競合するビルドツールではない - MavenまたはGradleを正確なバージョンに固定し、CIビルドがローカルと一致するようにするwrapperである。
Maven Wrapper (mvnw) とGradle Wrapper (gradlew) は、repoにコミットされるスクリプトで、固定されたバージョンのMavenまたはGradleをダウンロードして実行する。両者はそれぞれのビルドツールに対して、同じ問題 - バージョンの再現性 - を解決する。
| Maven Wrapper (mvnw) | Gradle Wrapper (gradlew) | |
|---|---|---|
| 固定する対象 | Mavenのバージョン | Gradleのバージョン |
| コミットするファイル | .mvn/wrapper + mvnw | gradle/wrapper + gradlew |
| CIコマンド | ./mvnw ... | ./gradlew ... |
| 利点 | プリインストールのMaven不要 | プリインストールのGradle不要 |
| 成熟度 | 標準 (gradlewより新しい) | 長年のデフォルト |
CIにおいて
すでに使っているビルドツールに対してwrapperを使う: ./gradlew または ./mvnw はrepoから正確に固定されたバージョンを実行するため、CIはrunnerにプリインストールされたMaven/Gradleに依存しない。Gradle Wrapperは何年もの間、事実上の標準だった。Maven WrapperはMavenプロジェクトに同じ保証をもたらす。これらはビルドツールの選択に対して補完的であり、互いの代替ではない。
cacheして固定する
wrapperファイルをコミットし、CIでは ./mvnw または ./gradlew 経由で実行し、ビルドファイルをキーにして ~/.m2 または ~/.gradle をcacheする。ビルドはCI runnerで動く。高速なマネージドrunnerはcache missでの重いJVMビルドを短縮する。
結論
Mavenでは: Maven Wrapper (mvnw) を使う。Gradleでは: Gradle Wrapper (gradlew) を使う。これらは再現可能なCIのためにビルドツールのバージョンを固定する - MavenかGradleかの選択ではなく、どちらを使うにせよそのwrapperである。