Maven在尝试编译项目时崩溃“执行Maven时出错”,

qncylg1j  于 2022-11-02  发布在  Maven
关注(0)|答案(8)|浏览(276)

我正在尝试编译一个使用maven的项目。
运行mvn compile会导致以下错误:

[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

这发生在我运行它的任何地方,它不必在项目目录中。
我做错了什么?
Maven 3.3.9、ubuntu 17.04版本
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
1hdlvixo

1hdlvixo1#

看起来那个版本的maven在Java 9上不起作用,但在Java 8上可以。
确保您已安装相关的软件包,例如..

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

然后确保maven使用的是正确的版本,最简单的方法是在~/.mavenrc的末尾添加下面一行(如果需要,请创建它):

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

(You可能需要在/usr/lib/jvm/中查找所需的确切名称,因为它可能与您的系统不同)

vfwfrxfs

vfwfrxfs2#

我在Ubuntu/Mint 20.04中使用OpenJDK 17时也遇到了同样的问题。我发现OpenJDK 11工作得很好。
要考虑的关键要素:


# 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
osh3o9ms

osh3o9ms3#

问题

我也遇到了同样的问题,那是因为Maven 3. 6. 3与JDK17不兼容。
遗憾的是,我无法通过Ubuntu软件包管理器更新到3.8.3,所以我手动安装了它。
在ubuntu上安装的步骤如下:

溶液

要求

Maven 3.3+需要安装JDK 1.7或更高版本。
(可能已过时,因此您遇到此问题,因为您使用了过于新颖的JDK)

循序渐进

下载Apache Maven。我安装的是3.8.4,您可以在这里查看最新版本:https://maven.apache.org/download.cgi
我们将归档文件保存到/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

然后将其解压缩到/opt并删除归档文件

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

接下来,我们创建一个符号链接

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

最后,我们建立了

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

为了在不重新启动shell的情况下使用它,我们将其设置为可执行文件并运行它

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

现在,您可以验证它是否已正确安装

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

一体化解决方案

为了方便起见,我添加了一个带有bash脚本的公共Gist,用于准备您的系统,您可以重新启动或运行一个额外的命令来使用它:

source /etc/profile.d/maven.sh

https://gist.github.com/Illutax/683483a4f50a749ea77bff0cb9637dea
此脚本采用一个可选参数来安装备用版本。
运行如下:sh maven-install.sh 3.8.4 && source /etc/profile.d/maven.sh,您就可以开始了

来源

由linuxize.com上的一篇帖子派生。

5tmbdcev

5tmbdcev4#

我 必须 处理 Java8 和 Java17 项目 , 不 想 每次 运行 jar 或 maven 时 都 使用 update-alternatives
我 将 这 两 个 别名 添加 到 启动 脚本 中 ( 例如 添加 到 .bashrc.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'

中 的 每 一 个
您 可以 根据 自己 的 具体 JAVA 版本 随意 修改 它们 。
现在 , 如果 我 想 为 Java8 项目 运行 maven , 只需 在 前面 添加 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]

格式
JAR 也 是 如此 :

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

格式

qfe3c7zg

qfe3c7zg5#

看起来您使用的是Java 9。请尝试切换到更稳定的Java 8版本。

在Linux上安装Java 8

例如,使用本教程How To Install Java with Apt-Get on Ubuntu 16.04
这是一个简单的选择,你可以直接下载一个。但是在抱怨这种语义之前,请尝试一种简单的方法来检查解决方案是否有效:)如果它有效,你可以完全卸载,删除ppa,然后开始处理语义。

vd2z7a6w

vd2z7a6w6#

确保你的guice和java sdk是兼容的。当我有guice 4. 2. 2和jdk 16的时候也有同样的问题。在我把guice升级到5. 0. 1之后问题就解决了。

zsbz8rwp

zsbz8rwp7#

这似乎是一个ubuntu specific issue,因为使用了一个自定义的maven。对我来说最好的解决方案是切换到sdkman的maven版本,而不必处理maven升级(我的组织使用http工件,所以在3.8中需要很多变通方法):

sdk install maven 3.6.3
csga3l58

csga3l588#

如果你使用的是Java 16,这可能也是因为这个原因。如果Java 16是你的用例所必需的,尝试使用ubuntu 20. x服务器。

相关问题