Skip to content
Latchkey

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 + mvnwgradle/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である。

関連ガイド