ubuntu Maven:未找到类定义错误:代码生成异常

ny6fqffe  于 2022-12-03  发布在  Maven
关注(0)|答案(8)|浏览(178)

每当我尝试构建任何maven项目或生成一些原型时,我都会收到以下错误:

[ERROR] Error executing Maven.
[ERROR] java.lang.NoClassDefFoundError: com/google/inject/internal/cglib/core/$CodeGenerationException
[ERROR] Caused by: com/google/inject/internal/cglib/core/$CodeGenerationException
[ERROR] Caused by: com.google.inject.internal.cglib.core.$CodeGenerationException

我在Ubuntu 14.04上使用jdk 8 oracle和jdk 7 openjdk(我经常使用Ubuntu的update-alternative --config javac在两个java之间切换)。
如果我逃跑

mvn -B archetype:generate   -DarchetypeGroupId=org.apache.maven.archetypes   -DgroupId=com.mycompany.app   -DartifactId=my-app -X

我会得到以下输出:

username@pcname:~/Desktop/projects/mvn_simple$ mvn -B archetype:generate   -DarchetypeGroupId=org.apache.maven.archetypes   -DgroupId=com.mycompany.app   -DartifactId=my-app -X
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-40-generic", arch: "amd64", family: "unix"
[ERROR] Error executing Maven.
com.google.common.collect.ComputationException: java.lang.NoClassDefFoundError: com/google/inject/internal/cglib/core/$CodeGenerationException
    at com.google.common.collect.MapMaker$ComputingMapAdapter.get(MapMaker.java:890)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:49)
    at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50)
    at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:127)
    at com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:530)
    at com.google.inject.internal.AbstractBindingProcessor$Processor$1.run(AbstractBindingProcessor.java:179)
    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:96)
    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:470)
    at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:196)
    at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:160)
    at org.apache.maven.cli.MavenCli.container(MavenCli.java:375)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:191)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    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.NoClassDefFoundError: com/google/inject/internal/cglib/core/$CodeGenerationException
    at com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:156)
    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.apply(FailableCache.java:38)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingValueReference.compute(ComputingConcurrentHashMap.java:356)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.compute(ComputingConcurrentHashMap.java:182)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:151)
    at com.google.common.collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:67)
    at com.google.common.collect.MapMaker$ComputingMapAdapter.get(MapMaker.java:886)
    ... 25 more
Caused by: java.lang.ClassNotFoundException: com.google.inject.internal.cglib.core.$CodeGenerationException
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
    ... 36 more
pcrecxhr

pcrecxhr1#

这似乎是由于Ubuntu在maven 3.6.3中使用了guice.jar的非no_aop版本(需要no_aop guice.jar)所致。
作为Ubuntu中的一个变通方案,你可以(如果你不在乎破坏一些其他实际需要非no_aop jar的Ubuntu包):

sudo wget https://repo.maven.apache.org/maven2/com/google/inject/guice/4.2.1/guice-4.2.1-no_aop.jar -O /usr/share/java/guice.jar

但是直接使用官方的maven版本应该更好更安全
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/
而不是Ubuntu打包的那个。(作为使用sdkman.io的替代安装Maven)
附言:Ubuntu似乎试图通过将不同的jar放在/usr/shara/java/下并将其链接起来,从而在不同的java包之间共享jar--这是一种高尚的努力,但却是一种疯狂的做法)

sh7euo9m

sh7euo9m2#

请尝试其他Java版本。
对我来说,经过一些升级,它已经切换到使用Java 16超过11。

gg0vcinb

gg0vcinb3#

在我的例子中,路径变量的顺序导致了这个问题。

PATH=$PATH:$M2 - Causing the error
PATH=$M2:$PATH - Solve the problem
bf1o4zei

bf1o4zei4#

尝试

sudo apt-get upgrade

在所有环境(如java等)上设置所有必需版本
然后重新启动机器即可解决问题。

zazmityj

zazmityj5#

重新启动PC解决了问题:)

ax6ht2ek

ax6ht2ek6#

截至2021年10月25日,Ubuntu中的maven 3.6.x包无法在Java 17中正常工作。
创建vi ~/.mavenrc文件并给予低于17的任何版本。
export JAVA_HOME=/usr/lib/jvm/java-16-openjdk-amd64/
如果您希望升级到3.8.x以支持java 17. https://github.com/m-thirumal/installation_guide/blob/master/maven/upgrade_maven.md
(or正如前面已经建议的那样,使用sdkman.io安装与java相关的工具)

knsnq2tg

knsnq2tg7#

对我来说,这个问题是由于在我的pom.xml中提到了Java 13,在服务器上安装了Java 17。
因此,将服务器java版本更新为pom.xml中的版本。如果Linux上有多个JDK版本,请使用此命令选择正确的版本。

sudo update-alternatives --config java

选择正确的JDK版本,如果您的版本未列出,请使用上面的命令安装它并将其设置为活动JDK,然后执行干净的构建并运行

mvn clean install
 mvn spring-boot:run
nukf8bse

nukf8bse8#

可能您使用的Maven版本不支持您安装的Java版本。
我通过使用SDK man安装最新版本的Maven修复了该问题:

sdk install maven

来源:https://sdkman.io/sdks#maven

相关问题