Maven Wrapper vs Gradle Wrapper: builds JVM reproduzíveis no CI
Estas não são build tools rivais - são wrappers que fixam Maven ou Gradle em uma versão exata para que builds de CI correspondam aos locais.
O Maven Wrapper (mvnw) e o Gradle Wrapper (gradlew) são scripts commitados no repo que baixam e rodam uma versão fixada de Maven ou Gradle. Eles resolvem o mesmo problema - reprodutibilidade de versão - para suas respectivas build tools.
| Maven Wrapper (mvnw) | Gradle Wrapper (gradlew) | |
|---|---|---|
| Fixa | Versão do Maven | Versão do Gradle |
| Arquivos commitados | .mvn/wrapper + mvnw | gradle/wrapper + gradlew |
| Comando de CI | ./mvnw ... | ./gradlew ... |
| Benefício | Não precisa de Maven pré-instalado | Não precisa de Gradle pré-instalado |
| Maturidade | Padrão (mais novo que gradlew) | Padrão de longa data |
No CI
Use o wrapper para qualquer build tool que você já usa: ./gradlew ou ./mvnw roda a versão exata fixada do repo, então o CI não depende de qualquer Maven/Gradle que esteja pré-instalado no runner. O Gradle Wrapper tem sido o padrão de fato por anos; o Maven Wrapper traz a mesma garantia para projetos Maven. Eles são complementares à sua escolha de build tool, não alternativas um ao outro.
Faça cache e fixe
Comite os arquivos do wrapper, rode via ./mvnw ou ./gradlew no CI e faça cache de ~/.m2 ou ~/.gradle com chave nos seus arquivos de build. O build roda em runners de CI; runners gerenciados mais rápidos encurtam builds JVM pesados em um cache miss.
O veredito
Em Maven: use o Maven Wrapper (mvnw); em Gradle: use o Gradle Wrapper (gradlew). Eles fixam a versão da build tool para um CI reproduzível - não é uma escolha entre Maven e Gradle, mas um wrapper para qualquer um que você use.