Gradle: Cómo añadir Gradle Wrapper desde Docker
Gradle Wrapper
Gradle recomienda Gradle Wrapper como la mejor forma de ejecutar cualquier Gradle build. Gradle Wrapper es un script que descarga e invoca una versión específica de Gradle. Esto supone dos ventajas. La primera es que no necesitas tener Gradle en tu entorno. La segunda es que puedes garantizar que el build script siempre se ejecuta con la misma versión de Gradle.
Añadir el Gradle Wrapper es tan fácil como ejecutar el siguiente comando:
$ gradle wrapper
> Task :wrapper
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
Tal como se describe en la documentación de Gradle, el proceso es realmente sencillo. Además de añadir el Wrapper, también puedes configurar sus propiedades empleando algunas opciones en la línea de comandos: --gradle-version
, --gradle-distribution-url
,--distribution-type
, etc. No obstante, esto asume que ya dispones de una instalación de Gradle disponible en tu sistema (esto es un poco contradictorio).
Añadir Gradle Wrapper desde Docker
Si no dispones de Gradle, pero sí de Docker, todavía puedes añadir el Wrapper. El siguiente comando añadirá el Wrapper utilizando Docker en lugar de una instalación local:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt/gen \
-w /opt/gen \
gradle:6.9-jre /usr/bin/gradle wrapper
El comportamiento es muy similar a si ejecutásemos el comando empleando una distribución local de Gradle, así que las mismas opciones de la línea de comandos son válidas:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt/gen \
-w /opt/gen \
gradle:6.9-jre /usr/bin/gradle wrapper --gradle-version 7.1.1 --distribution-type all
El comando anterior ejecuta /usr/bin/gradle
(el comando proporcionado), en el contenedor basado en la imagen de Docker gradle:6.9-jre
.
--rm
elimina el contenedor una vez la ejecución del comando ha terminado.-u "$(id -u):$(id -g)"
fuerza a que el contenedor se ejecute con eluser:group
actual del sistema anfitrión. Esto permite que gradle genere los ficheros del Wrapper con los permisos correctos.-v $(pwd):/opt/gen
monta el directorio actual en el contenedor de forma que los ficheros generados se persistan localmente.-w /opt/gen
fija el directorio de trabajo para que gradle genere el Wrapper en el directorio que hemos montado.
Por último, para hacer que los ficheros del Gradle Wrapper estén disponibles para el resto del equipo, debes de registrar los siguientes ficheros en tu sistema de control de versiones (todos excepto los contenidos en el directorio .gradle
):
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat