mvnd
- el demonio Maven mvnd
mvnd
opciones específicasmvnd
desde la fuentemvnd
mvnd
Este proyecto tiene como objetivo proporcionar compilaciones de Maven más rápidas utilizando técnicas conocidas de Gradle y Takari.
Descripción general de la arquitectura:
mvnd
integra Maven (por lo que no es necesario instalar Maven por separado).
Las compilaciones reales ocurren dentro de un proceso en segundo plano de larga duración, también conocido como demonio.
Una instancia de demonio puede atender múltiples solicitudes consecutivas del cliente mvnd
.
El cliente mvnd
es un ejecutable nativo creado con GraalVM. Se inicia más rápido y utiliza menos memoria en comparación con el inicio de una JVM tradicional.
Se pueden generar varios demonios en paralelo si no hay ningún demonio inactivo para atender una solicitud de compilación.
Esta arquitectura trae las siguientes ventajas:
No es necesario que la JVM para ejecutar las compilaciones reales comience de nuevo para cada compilación.
Los cargadores de clases que contienen clases de complementos de Maven se almacenan en caché en múltiples compilaciones. Por lo tanto, los archivos jar del complemento se leen y analizan solo una vez. Las versiones SNAPSHOT de los complementos de Maven no se almacenan en caché.
También se conserva el código nativo producido por el compilador Just-In-Time (JIT) dentro de la JVM. En comparación con el stock Maven, se dedica menos tiempo a la compilación JIT. Durante las compilaciones repetidas, el código optimizado para JIT está disponible inmediatamente. Esto se aplica no solo al código proveniente de los complementos de Maven y Maven Core, sino también a todo el código proveniente del propio JDK.
mvnd
trae las siguientes características además del Maven original:
De forma predeterminada, 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 su árbol fuente no admite compilaciones paralelas, pase -T1
a la línea de comando para que su compilación sea serial.
Salida de consola mejorada: creemos que la salida de una compilación paralela en Maven original es difícil de seguir. Por lo tanto, implementamos una vista continua simplificada que muestra el estado de cada subproceso de compilación en una línea separada. Así es como se ve en una máquina con 24 núcleos:
Una vez finalizada la compilación, la salida completa de Maven se envía a la consola.
mvnd
Si SDKMAN! soporta tu sistema operativo, es tan fácil como
sdk install mvnd
Si utilizó la instalación manual en el pasado, asegúrese de que la configuración en ~/.m2/mvnd.properties
aún tenga sentido. Con SDKMAN!, el archivo ~/.m2/mvnd.properties
normalmente no es necesario en absoluto, porque tanto JAVA_HOME
como MVND_HOME
son administrados por SDKMAN!.
brew install mvndaemon/homebrew-mvnd/mvnd
Nota: Hay dos fórmulas: mvnd
que instala la última versión y mvnd@1
que instala la línea 1.x.
sudo port install mvnd
Buscamos aporte para apoyar a Chocolatey, Scoop o asdf. Si te apetece ayudarnos…
Opcionalmente, puede configurar la finalización de la siguiente manera:
# ensure that MVND_HOME points to your mvnd distribution, note that sdkman does it for you
$ echo ' source $MVND_HOME/bin/mvnd-bash-completion.bash ' >> ~ /.bashrc
bash
es el único shell compatible en este momento.
Descargue el ZIP más reciente adecuado para su plataforma desde https://downloads.apache.org/maven/mvnd/
Descomprímalo en un directorio de su elección
Agregue el directorio bin
a PATH
Opcionalmente, puede crear ~/.m2/mvnd.properties
y configurar la propiedad java.home
en caso de que no quiera molestarse en configurar la variable de entorno JAVA_HOME
.
Pruebe si mvnd
funciona:
$ mvnd --version
Maven Daemon 0.0.11-linux-amd64 (native)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13
Default locale: en_IE, platform encoding: UTF-8
OS name: " linux " , version: " 5.6.13-200.fc31.x86_64 " , arch: " amd64 " , family: " unix "
Si está en Windows y ve un mensaje que indica que VCRUNTIME140.dll was not found
, debe instalar vc_redist.x64.exe
desde https://support.microsoft.com/en-us/help/2977003/the-latest-supported -descargas-visual-c. Consulte Oracle/graal#1762 para obtener más información.
Si está en macOS, deberá eliminar las marcas de cuarentena de todos los archivos después de descomprimir el archivo:
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
mvnd
está diseñado para aceptar las mismas opciones de línea de comando que stock mvn
(más algunos extras; consulte a continuación), por ejemplo:
mvnd verify
mvnd
opciones específicas --status
estado ejecutando demonios
--stop
mata a todos los demonios en ejecución
mvnd --help
imprime la lista completa de opciones
La configuración se puede proporcionar a través del archivo de propiedades. Mvnd lee el archivo de propiedades desde las siguientes ubicaciones:
la ruta de propiedades proporcionada mediante la variable de entorno MVND_PROPERTIES_PATH
o la variable de sistema mvnd.propertiesPath
la ruta de propiedades locales ubicada en [PROJECT_HOME]/.mvn/mvnd.properties
la ruta de propiedades del usuario ubicada en: [USER_HOME]/.m2/mvnd.properties
la ruta de propiedades del sistema ubicada en: [MVND_HOME]/conf/mvnd.properties
Las propiedades definidas en los primeros archivos tendrán prioridad sobre las propiedades especificadas en un archivo de menor clasificación.
Algunas propiedades especiales no siguen el mecanismo anterior:
mvnd.daemonStorage
: esta propiedad define la ubicación donde mvnd almacena sus archivos (registro y registros de demonio). Esta propiedad solo se puede definir como una propiedad del sistema en la línea de comando
mvnd.id
: esta propiedad se utiliza internamente para identificar el demonio que se está creando.
mvnd.extClasspath
: opción interna para especificar la ruta de clases de la extensión maven
mvnd.coreExtensions
: opción interna para especificar la lista de extensiones de Maven para registrar
Para obtener una lista completa de propiedades disponibles, consulte /dist/src/main/distro/conf/mvnd.properties.
mvnd
desde la fuente git
experto
Descargue y descomprima GraalVM CE desde GitHub
Establezca JAVA_HOME
en el lugar donde descomprimió GraalVM en el paso anterior. Compruebe que la salida java -version
sea la esperada:
$ $JAVA_HOME /bin/java -version
openjdk version " 11.0.9 " 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
Instale la herramienta native-image
:
$ $JAVA_HOME /bin/gu install native-image
native-image
puede requerir la instalación de software adicional según su plataforma; consulte la documentación native-image
.
mvnd
$ git clone https://github.com/apache/maven-mvnd.git
$ cd maven-mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
Tenga en cuenta que si utiliza Windows como sistema operativo, necesitará los siguientes requisitos previos para crear maven-mvnd
: una versión de Visual Studio con la carga de trabajo "Desarrollo de escritorio con C++" y el componente individual "Windows Universal CRT SDK".
mvnd
$ cp -R dist/target/mvnd-[version] [target-dir]
Luego, simplemente puede agregar [target-dir]/bin
a su PATH
y ejecutar mvnd
.
Estamos felices de mejorar mvnd
, por lo que sus comentarios son bienvenidos.