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 tenemos:
- mvnd incorpora 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.El clien
- 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 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
Hay varias formas de instalarlo, yo me quedo con la manual: https://github.com/mvndaemon/mvnd#install-manually
En las imágenes podemos ver la diferencia entre
Un mvn clean:
Y un mvnd clean:
O con un mvnd install