Skip to content
Latchkey

Maven vs Gradle: CIにはどちらのJVM buildツールを?

JVMプロジェクトでは、buildツールがCI時間を支配します。MavenとGradleはそこへ至る、非常に異なる道を取ります。

どちらもJVMプロジェクトをコンパイル、テスト、パッケージ化します。Mavenは宣言的なXMLと規約を用い、Gradleは強力なインクリメンタルbuildとcacheを備えた、プログラム可能なGroovy/Kotlin DSLを用います。

MavenGradle
設定XML (pom.xml)、宣言的Groovy/Kotlin DSL、プログラム可能
インクリメンタルbuild限定的強力 (taskレベル)
build cacheローカルリポジトリのみローカル + リモートのbuild cache
大規模buildでの速度より遅いしばしばより速い (cache、daemon)
学習曲線低い高い

CIにおいて

Gradleのインクリメンタルbuildとbuild cache (ローカルおよびリモート) は、大規模なマルチモジュールプロジェクトでリビルド時間を劇的に削減でき、多くの大規模コードベースがGradleを好む理由です。Mavenはよりシンプルで予測しやすく、その規約優先の設定モデルは理解しやすいものです。Gradleのdaemonはローカルでは役立ちますが、エフェメラルなCIランナーでは効果が小さくなります。

CIでcacheする

Mavenでは ~/.m2/repository を、Gradleでは ~/.gradle/caches を、buildファイルとlockfileでキー付けしてcacheしましょう。Gradleでは、CI job間で共有されるリモートのbuild cacheが、単一で最大の高速化です。

結論

速度が重要な大規模またはポリグロットのbuild: Gradle、特にリモートのbuild cache付き。よりシンプルなプロジェクトや規約を重んじるチーム: Maven。CIを速く保つために、どちらでも依存関係をcacheしましょう。

関連ガイド