Maven se bloquea al intentar compilar un proyecto “Error al ejecutar Maven”.

10 minutos de lectura

Lex - Boicot a Slack - ver el avatar de usuario de la biografía
Lex – Boicot a Slack – ver biografía

Estoy tratando de compilar un proyecto que usa maven.

Correr mvn compile da como resultado el siguiente error:

[ERROR] Error executing Maven.
[ERROR] java.lang.IllegalStateException: Unable to load cache item
[ERROR] Caused by: Unable to load cache item
[ERROR] Caused by: Could not initialize class com.google.inject.internal.cglib.core.$ReflectUtils

Esto sucede en cualquier lugar donde ejecuto esto, no tiene que estar en el directorio del proyecto.

¿Qué estoy haciendo mal?

experto 3.3.9, ubuntu 17.04

Salida completa de mvn -X:

Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 9-Ubuntu, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-9-openjdk-amd64
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "4.10.0-21-generic", arch: "amd64", family: "unix"
[ERROR] Error executing Maven.
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Unable to load cache item
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2205)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3955)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4870)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4876)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
    at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50)
    at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:137)
    at com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:533)
    at com.google.inject.internal.AbstractBindingProcessor$Processor$1.run(AbstractBindingProcessor.java:160)
    at com.google.inject.internal.ProcessedBindingData.initializeBindings(ProcessedBindingData.java:44)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:123)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
    at com.google.inject.Guice.createInjector(Guice.java:99)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:481)
    at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:206)
    at org.apache.maven.cli.MavenCli.container(MavenCli.java:545)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:281)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:547)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.IllegalStateException: Unable to load cache item
    at com.google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:79)
    at com.google.inject.internal.cglib.core.internal.$LoadingCache.get(LoadingCache.java:34)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:291)
    at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:65)
    at com.google.inject.internal.BytecodeGen.newFastClass(BytecodeGen.java:204)
    at com.google.inject.internal.DefaultConstructionProxyFactory.create(DefaultConstructionProxyFactory.java:55)
    at com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:159)
    at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:90)
    at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33)
    at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3540)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2321)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2284)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199)
    ... 28 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.google.inject.internal.cglib.core.$ReflectUtils
    at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)
    at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:77)
    at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
    at com.google.inject.internal.cglib.core.internal.$LoadingCache$2.call(LoadingCache.java:54)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at com.google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:61)
    ... 44 more

  • ¿Ejecutaste -X para una depuración completa?

    – farellmr

    08/06/2017 a las 14:50

  • @farrellmr Se agregó la salida de depuración a la pregunta

    – Lex – Boicot a Slack – ver biografía

    8 de junio de 2017 a las 14:54

  • Mismo error en maven clean?

    – Thihara

    8 de junio de 2017 a las 14:57

  • @Thihara sí, lo mismo con mvn clean

    – Lex – Boicot a Slack – ver biografía

    8 de junio de 2017 a las 14:58

  • No creo que Maven 3.3.9 sea compatible con Java 9

    – A mi

    8 de junio de 2017 a las 15:18

Tuve el mismo problema en Ubuntu/Mint 20.04 cuando usaba OpenJDK 17. Descubrí que con OpenJDK 11 funciona bien.

Elementos clave a considerar:

# Have version 11 installed
sudo apt install openjdk-11-jdk
# Update alternatives to use version 11 as default
sudo update-alternatives --config java
# Set the JAVA_HOME environment variable accordingly
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64

  • Teniendo en cuenta que Java 17 es una versión LTS que se lanzó hace siete meses, me sorprende que uno tenga que cambiar a 11 para usar Maven. Pero funciona para mi propósito. Gracias.

    –Richard Steinbrecht

    21/04/2022 a las 10:50

  • Este es un problema específico de ubuntu, usando sdk install maven 3.6.3 hace que desaparezca. (Respuesta agregada también)

    – aksh1618

    6 oct 2022 a las 11:29


Parece que esa versión de maven no funciona en Java 9, pero sí en Java 8.

Asegúrese de tener instalados los paquetes correspondientes, p.

sudo apt install openjdk-8-jre openjdk-8-jdk

Y luego asegúrese de que maven use la versión correcta. La forma más sencilla de hacer esto es agregar la siguiente línea al final de ~/.mavenrc (Creándolo si es necesario):

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

(Es posible que deba mirar a su alrededor en /usr/lib/jvm/ para el nombre exacto que necesita, ya que podría ser diferente para su sistema)

  • y funciona en Java 11 si no puede instalar Java 8

    – Zorro

    8 de junio de 2021 a las 6:09

Avatar de usuario de Valerij Dobler
valerij dobler

Problema

Me enfrenté al mismo problema. Se debió a que maven 3.6.3 era incompatible con jdk17.

Lamentablemente, no pude actualizar a 3.8.3 a través del administrador de paquetes de Ubuntu, así que lo instalé manualmente.
Los pasos para instalar en ubuntu son los siguientes:

Solución

Requisitos

Maven 3.3+ requiere la instalación de JDK 1.7 o superior.
(Puede ser obsoleto, por lo tanto, encontró este problema porque usó un JDK demasiado novedoso)

Paso a paso

Descargar Apache Maven. Instalé 3.8.4, puede buscar la versión más reciente aquí: https://maven.apache.org/download.cgi

Guardamos el archivo en /tmp

$ TMP_MAVEN_VERSION=3.8.4
$ wget https://apache.org/dist/maven/maven-3/$TMP_MAVEN_VERSION/binaries/apache-maven-$TMP_MAVEN_VERSION-bin.tar.gz -P /tmp

Luego descomprímalo para /opt y eliminar el archivo

$ sudo tar xf /tmp/apache-maven-*.tar.gz -C /opt
$ sudo rm /tmp/apache-maven-*-bin.tar.gz

A continuación, creamos un enlace simbólico

$ sudo ln -s /opt/apache-maven-$TMP_MAVEN_VERSION /opt/maven

Por último configuramos el env

$ sudo touch /etc/profile.d/maven.sh
$ sudo chown ubuntu /etc/profile.d/maven.sh
$ > /etc/profile.d/maven.sh echo "export JAVA_HOME=/usr/lib/jvm/default-java"
$ >> /etc/profile.d/maven.sh echo "export M2_HOME=/opt/maven"
$ >> /etc/profile.d/maven.sh echo "export MAVEN_HOME=/opt/maven"
$ >> /etc/profile.d/maven.sh echo "export PATH=$M2_HOME/bin:\$PATH"

Para usarlo sin reiniciar el shell lo hacemos ejecutable y lo ejecutamos

$ sudo chmod +x /etc/profile.d/maven.sh
$ source /etc/profile.d/maven.sh

Ahora puedes comprobar que está correctamente instalado

$ mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /opt/maven
Java version: 11.0.13, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.11.0-1022-aws", arch: "amd64", family: "unix"

Todo en una solución

Para mayor comodidad, agregué un Gist público con un script bash que prepara su sistema, reinicie o ejecute un comando adicional para poder usarlo:

source /etc/profile.d/maven.sh

https://gist.github.com/Illutax/683483a4f50a749ea77bff0cb9637dea

Este script toma un argumento opcional para instalar una versión alternativa.
Ejecútalo así: sh maven-install.sh 3.8.4 && source /etc/profile.d/maven.sh y estás listo para irte

Fuente

Derivado de una publicación en linuxize.com.

Tengo que hacer malabarismos con los proyectos Java8 y Java17, y no quiero usar update-alternatives cada vez que quiero ejecutar un jar o maven.

Agregué esos 2 alias a mis scripts de inicio (por ejemplo, a .bashrc o .zshrc):

alias java8='JAVA_HOME=/usr/lib/jvm/bellsoft-java8-full-amd64 PATH=/usr/lib/jvm/bellsoft-java8-full-amd64/bin/:$PATH'
alias java17='JAVA_HOME=/usr/lib/jvm/bellsoft-java17-full-amd64 PATH=/usr/lib/jvm/bellsoft-java17-full-amd64/bin/:$PATH'

Siéntase libre de adaptarlos a sus versiones específicas de JAVA.

Ahora, si quiero ejecutar maven para un proyecto Java8, simplemente antepongo java8:

❯ mvn clean package

[ERROR] Error executing Maven.
[ERROR] java.lang.IllegalStateException: Unable to load cache item
[ERROR] Caused by: Unable to load cache item
[ERROR] Caused by: Could not initialize class com.google.inject.internal.cglib.core.$MethodWrapper


❯ java8 mvn clean package

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 

Lo mismo ocurre con los JAR:

java8 java -jar some_old.jar
java17 java -jar some_new.jar

Avatar de usuario de Thihara
Thihara

Parece que está utilizando Java 9. Intente cambiar a una versión más estable de Java 8.

Instalación de Java 8 en Linux

Por ejemplo, usando este tutorial Cómo instalar Java con Apt-Get en Ubuntu 16.04

Esa es la opción fácil, siempre puedes descargar uno directamente. Pero antes de lamentarse por esa semántica, intente la manera fácil de verificar si la solución funciona 🙂 Si funciona, siempre puede realizar una desinstalación completa, eliminar el ppa y comenzar a trabajar en la semántica.

  • digitalocean.com/community/tutorials/…

    – Thihara

    8 jun 2017 a las 15:05

  • Hmm, preferiría no tener que agregar un ppa

    – Lex – Boicot a Slack – ver biografía

    8 de junio de 2017 a las 15:08

  • Esa es la opción fácil, siempre puedes descargar uno directamente. Pero antes de lamentarse por esa semántica, intente la manera fácil de verificar si la solución funciona 🙂 Si funciona, siempre puede realizar una desinstalación completa, eliminar el ppa y comenzar a trabajar en la semántica.

    – Thihara

    8 de junio de 2017 a las 15:13

avatar de usuario de aksh1618
aksh1618

Esto parece ser un problema específico de ubuntu debido a que se está utilizando un experto personalizado. La mejor solución para mí fue cambiar a la compilación maven de sdkman sin tener que lidiar con la actualización de maven (mi organización usa artefactos http, por lo que se necesitan muchas soluciones con 3.8):

sdk install maven 3.6.3

  • digitalocean.com/community/tutorials/…

    – Thihara

    8 jun 2017 a las 15:05

  • Hmm, preferiría no tener que agregar un ppa

    – Lex – Boicot a Slack – ver biografía

    8 de junio de 2017 a las 15:08

  • Esa es la opción fácil, siempre puedes descargar uno directamente. Pero antes de lamentarse por esa semántica, intente la manera fácil de verificar si la solución funciona 🙂 Si funciona, siempre puede realizar una desinstalación completa, eliminar el ppa y comenzar a trabajar en la semántica.

    – Thihara

    8 de junio de 2017 a las 15:13

Avatar de usuario de Alan Yang
alan yang

Asegúrese de que guice y java sdk sean compatibles. Tuve el mismo problema cuando tenía guice 4.2.2 con jdk 16. El problema se resolvió después de actualizar guice a 5.0.1.

¿Ha sido útil esta solución?