Hablemos de mvnd
Mvnd es una herramienta que actúa como wrapper de Maven, haciendo que las compilaciones Maven sean mucho más rápidas (usando técnicas de Gradle).
Entre sus características más importantes encontramos:
- mvnd viene incorporado con Maven, por lo que no es necesario instalar Maven por separado.
- Las construcciones Maven se hacen dentro de un proceso demonio (mvnd de mvn + Daemon), de modo que no es necesario ejecutar una nueva JVM por cada compilación.
- Una instancia del demonio puede servir múltiples peticiones consecutivas del cliente mvnd.
- mvnd es un ejecutable nativo construido con GraalVM, por lo que se inicia más rápido y utiliza menos memoria en comparación con el inicio de una JVM tradicional.
- Los class-loaders que contienen las clases de los plugins de Maven se almacenan en caché durante varias construcciones, los jars de los plugins se leen y analizan sólo una vez. Las versiones SNAPSHOT de los plugins de Maven no se almacenan en caché.
- El código nativo producido por el compilador Just-In-Time (JIT) dentro de la JVM también se mantiene. En comparación con Maven original, la compilación JIT emplea menos tiempo. Durante las repetidas construcciones el código optimizado por JIT está disponible inmediatamente. Esto se aplica no sólo al código procedente de los plugins de Maven y Maven Core, sino también a todo el código procedente del propio JDK.
- Por defecto, mvnd construye sus módulos en paralelo utilizando múltiples núcleos de CPU. El número de núcleos utilizados viene dado por la siguiente fórmula:
Math.max(Runtime.getRuntime().availableProcessors() – 1, 1)
Si el árbol de fuentes del proyecto no soporta construcciones paralelas, se puede pasar -T1 en la línea de comandos para hacer la construcción en serie
Instalación
Existen diversas maneras de instalarlo, pero para este caso vamos a usar el método manual:
- Descargar el ZIP adecuado para la plataforma desde la que trabajemos desde el repositorio.
- Descomprimir los archivos en la carpeta que nos interese.
- Añadir el directorio bin al PATH.
- De manera opcional, podremos crear un «~/.m2/mvnd.properties» y establecer la propiedad «java.home» en caso de que no queramos establecer la variable de entorno JAVA_HOME.
- Por último, para probar si mvnd funciona lanzaremos «mvnd –version». Si todo va bien, debería salirnos algo como esto:
En caso de que en un entorno Windows salga el siguiente mensaje: «VCRUNTIME140.dll was not found», entonces será necesario instalar el ejecutable «vc_redist.x64.exe» desde la página de soporte de Microsoft (issue relacionada).
Mejoras
En las siguientes capturas podemos ver la diferencia entre mvn y mvnd: