Qué función cumplen gradlew / mvnw

Sebastián Plawner
Ibisdev
Published in
2 min readMay 22, 2020

En este artículo veremos qué función cumplen los archivos gradlew y mvnw, archivos que habrán visto al crear un nuevo proyecto en IntelliJ y que si entendemos su objetivo, nos serán muy útiles cuando configuremos CI/CD u otro desarrollador tome nuestro proyecto.

Hasta ahora, antes de crear un nuevo proyecto en Java o Kotlin, quizás preparemos nuestro entorno de trabajo para tener instalado Gradle o Maven.

Sin embargo, cuando creamos un nuevo proyecto en IntelliJ, automáticamente nos agrega un archivo que, en caso de usar Gradle se llamará gradlew y en el caso de Maven, mvnw. Además de estos archivos ejecutables, tendremos otros de configuración.

Esto que IntelliJ agrega por nosotros se denominan wrappers. Y tienen como objetivo permitirnos utilizar las herramientas de Gradle o Maven sin necesidad de tener instalada una versión global en nuestro sistema operativo. Además, podemos tener distintas versiones por cada proyecto. Es muy útil para prevenir incompatibilidades entre proyectos y segmentar correctamente lo que necesitamos para compilar cada uno.

Esto no sólo es útil por lo anterior, sino que nos permitirá utilizar el ejecutable dentro de una imagen de Docker. Supongamos que queremos dockerizar un proyecto, podemos utilizar una imagen base de OpenJDK que posee lo mínimo para correr una JVM, y luego compilar el proyecto corriendo:

gradlew build

Esto descargará la versión que esté configurada en los archivos de configuración del wrapper y ejecutará el código localmente, dentro del proyecto.

En conclusión, vemos que Gradle y Maven adoptaron esta capacidad de abstraer sus herramientas a modos portables que podamos instalar por proyecto, al igual que otros como en el caso de Ruby con rbenv, Python con venv y Node con node_modules. Cada lenguaje posee una manera de utilizar su típica herramienta manejadora de dependencias sin la necesidad de instalarlas a nivel global en todo el sistema operativo y cometer el error de guardar en caché dependencias que luego otro desarrollador puede no tener o bien generar incompatibilidad entre dependencias al instalar otras versiones.

--

--