Maven stürzt ab, wenn versucht wird, ein Projekt zu kompilieren „Fehler beim Ausführen von Maven“.

Lesezeit: 10 Minuten

Lex – Slack boykottieren – siehe Benutzeravatar von Bio
Lex – Slack boykottieren – siehe Bio

Ich versuche, ein Projekt zu kompilieren, das Maven verwendet.

Betrieb mvn compile führt zu folgendem Fehler:

[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

Dies passiert überall, wo ich es ausführe, es muss nicht im Projektverzeichnis sein.

Was mache ich falsch?

Maven 3.3.9, Ubuntu 17.04

Vollständige Ausgabe von 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

  • Haben Sie -X für eine vollständige Fehlersuche ausgeführt?

    – farrellmr

    8. Juni 2017 um 14:50 Uhr

  • @farrellm Debug-Ausgabe zur Frage hinzugefügt

    – Lex – Slack boykottieren – siehe Bio

    8. Juni 2017 um 14:54 Uhr

  • Gleicher Fehler bei Maven Clean?

    – Thihara

    8. Juni 2017 um 14:57 Uhr

  • @ Thihara ja, das gleiche mit mvn clean

    – Lex – Slack boykottieren – siehe Bio

    8. Juni 2017 um 14:58 Uhr

  • Ich glaube nicht, dass Maven 3.3.9 Java 9-kompatibel ist

    – Mir

    8. Juni 2017 um 15:18 Uhr

Sieht so aus, als ob diese Version von Maven nicht auf Java 9 funktioniert, aber auf Java 8.

Stellen Sie sicher, dass Sie die entsprechenden Pakete installiert haben, z.

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

Stellen Sie dann sicher, dass Maven die richtige Version verwendet. Der einfachste Weg, dies zu tun, besteht darin, die folgende Zeile am Ende von hinzuzufügen ~/.mavenrc (Bei Bedarf erstellen):

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

(Möglicherweise müssen Sie sich darin umsehen /usr/lib/jvm/ für den genauen Namen, den Sie benötigen, da er für Ihr System unterschiedlich sein kann)

  • und es funktioniert auf Java 11, wenn Sie Java 8 nicht installieren können

    – Fuchs

    8. Juni 2021 um 6:09 Uhr

Ich hatte das gleiche Problem in Ubuntu/Mint 20.04 bei der Verwendung von OpenJDK 17. Ich habe herausgefunden, dass es mit OpenJDK 11 gut funktioniert.

Zu berücksichtigende Schlüsselelemente:

# 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

  • Wenn man bedenkt, dass Java 17 eine LTS-Version ist, die vor sieben Monaten veröffentlicht wurde, haut es mich um, dass man auf 11 herunterstufen muss, um Maven zu verwenden. Aber für meinen Zweck funktioniert es. Vielen Dank.

    – Richard Steinbrecht

    21. April 2022 um 10:50 Uhr

  • Dies ist ein ubuntu-spezifisches Problem sdk install maven 3.6.3 lässt es verschwinden. (Antwort ebenfalls hinzugefügt)

    – aksh1618

    6. Oktober 2022 um 11:29 Uhr


Benutzeravatar von Valerij Dobler
Walerij Dobler

Problem

Ich stand vor dem gleichen Problem. Dies lag daran, dass Maven 3.6.3 nicht mit jdk17 kompatibel war.

Leider konnte ich über den Ubuntu-Paketmanager nicht auf 3.8.3 aktualisieren, also habe ich es manuell installiert.
Schritte zur Installation auf Ubuntu sind unten:

Lösung

Anforderungen

Für Maven 3.3+ muss JDK 1.7 oder höher installiert sein.
(Möglicherweise veraltet, daher ist dieses Problem aufgetreten, weil Sie ein zu neues JDK verwendet haben.)

Schritt für Schritt

Laden Sie Apache Maven herunter. Ich habe 3.8.4 installiert, Sie können hier nach der neuesten Version suchen: https://maven.apache.org/download.cgi

Wir speichern das Archiv unter /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

Dann entpacken Sie es zu /opt und entferne das Archiv

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

Als nächstes erstellen wir einen Sym-Link

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

Zuletzt richten wir die env ein

$ 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"

Um es zu verwenden, ohne die Shell neu zu starten, machen wir es ausführbar und führen es aus

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

Jetzt können Sie überprüfen, ob es richtig installiert ist

$ 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"

Alles in einer Lösung

Der Einfachheit halber habe ich einen öffentlichen Gist mit einem Bash-Skript hinzugefügt, das Ihr System vorbereitet. Sie starten entweder neu oder führen einen zusätzlichen Befehl aus, um es verwenden zu können:

source /etc/profile.d/maven.sh

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

Dieses Skript akzeptiert ein optionales Argument, um eine alternative Version zu installieren.
Führen Sie es so aus: sh maven-install.sh 3.8.4 && source /etc/profile.d/maven.sh und du bist gut zu gehen

Quelle

Abgeleitet von einem Beitrag auf linuxize.com.

Ich muss mit Java8- und Java17-Projekten jonglieren und möchte es nicht verwenden update-alternatives Jedes Mal, wenn ich ein Glas oder einen Maven ausführen möchte.

Ich habe diese 2 Aliase zu meinen Startskripten hinzugefügt (z. B. to .bashrc oder .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'

Fühlen Sie sich frei, sie an Ihre spezifischen JAVA-Versionen anzupassen.

Wenn ich jetzt maven für ein Java8-Projekt ausführen möchte, stelle ich einfach voran 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] 

Gleiches gilt für JARs:

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

Benutzeravatar von Thihara
Thihara

Anscheinend verwenden Sie Java 9. Versuchen Sie, zu einer stabileren Version von Java 8 zu wechseln.

Java 8 unter Linux installieren

ZB mit diesem Tutorial So installieren Sie Java mit Apt-Get unter Ubuntu 16.04

Das ist die einfache Option, Sie können immer eine direkt herunterladen. Aber bevor Sie sich über solche Semantiken beschweren, versuchen Sie es mit der einfachen Methode, um zu überprüfen, ob die Lösung funktioniert 🙂 Wenn sie funktioniert, können Sie immer eine vollständige Deinstallation durchführen, das ppa entfernen und an der Semantik arbeiten.

  • digitalocean.com/community/tutorials/…

    – Thihara

    8. Juni 2017 um 15:05 Uhr

  • Hmm, ich möchte lieber keinen Papa hinzufügen

    – Lex – Slack boykottieren – siehe Bio

    8. Juni 2017 um 15:08 Uhr

  • Das ist die einfache Option, Sie können immer eine direkt herunterladen. Aber bevor Sie sich über solche Semantiken beschweren, versuchen Sie es mit der einfachen Methode, um zu überprüfen, ob die Lösung funktioniert 🙂 Wenn sie funktioniert, können Sie immer eine vollständige Deinstallation durchführen, das ppa entfernen und an der Semantik arbeiten.

    – Thihara

    8. Juni 2017 um 15:13 Uhr

Benutzeravatar von Alan Yang
Alan Yang

Stellen Sie sicher, dass Ihr Guice- und Java-SDK kompatibel sind. Ich hatte das gleiche Problem, als ich Guice 4.2.2 mit JDK 16 hatte. Das Problem wurde behoben, nachdem ich Guice auf 5.0.1 aktualisiert hatte.

  • digitalocean.com/community/tutorials/…

    – Thihara

    8. Juni 2017 um 15:05 Uhr

  • Hmm, ich möchte lieber keinen Papa hinzufügen

    – Lex – Slack boykottieren – siehe Bio

    8. Juni 2017 um 15:08 Uhr

  • Das ist die einfache Option, Sie können immer eine direkt herunterladen. Aber bevor Sie sich über solche Semantiken beschweren, versuchen Sie es mit der einfachen Methode, um zu überprüfen, ob die Lösung funktioniert 🙂 Wenn sie funktioniert, können Sie immer eine vollständige Deinstallation durchführen, das ppa entfernen und an der Semantik arbeiten.

    – Thihara

    8. Juni 2017 um 15:13 Uhr

Benutzeravatar von aksh1618
aksh1618

Dies scheint ein Ubuntu-spezifisches Problem zu sein, da ein benutzerdefinierter Maven verwendet wird. Die beste Lösung für mich war, auf den Maven-Build von sdkman umzusteigen, ohne mich mit der Maven-Aktualisierung befassen zu müssen (meine Organisation verwendet HTTP-Artefakte, daher sind mit 3.8 viele Problemumgehungen erforderlich):

sdk install maven 3.6.3

1441350cookie-checkMaven stürzt ab, wenn versucht wird, ein Projekt zu kompilieren „Fehler beim Ausführen von Maven“.

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy