mvn -v报java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli

本文介绍了一个关于Maven使用过程中出现的UnsupportedClassVersionError错误及其解决办法。该问题源于Maven本地仓库路径设置不当,通过调整settings.xml文件中的localRepository配置可以解决此问题。

今天,在使用maven时,命令提示符中输入:mvn -v,如果报“Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0”的错误;一开始,我以为是是由于版本不兼容造成的;两个服务器的版本是一模一样的啊!我无意中看了一下maven的安装目录,呵呵,原来在新服务中多加了一层目录,将settings.xml中的<localRepository>E:\XX\apache-maven-3.3.9\repository</localRepository>目录修改一下就好了!


PS D:\OpenRefine-3.9.5-src\OpenRefine-3.9.5\extensions\database> mvn clean D:\OpenRefine-3.9.5-src\OpenRefine-3.9.5\extensions\database>set JAVA_HOME=C:\Zulu\zulu-21\ [INFO] Scanning for projects... [WARNING] The POM for org.sonatype.plugins:nexus-staging-maven-plugin:jar:1.7.0 is missing, no dependency information available [INFO] Inspecting build with total of 1 modules... --------------------------------------------------- constituent[0]: file:/D:/apache-maven-3.9.9/conf/logging/ constituent[1]: file:/D:/apache-maven-3.9.9/lib/aopalliance-1.0.jar constituent[2]: file:/D:/apache-maven-3.9.9/lib/asm-9.8.jar constituent[3]: file:/D:/apache-maven-3.9.9/lib/commons-cli-1.9.0.jar constituent[4]: file:/D:/apache-maven-3.9.9/lib/commons-codec-1.18.0.jar constituent[5]: file:/D:/apache-maven-3.9.9/lib/error_prone_annotations-2.38.0.jar constituent[6]: file:/D:/apache-maven-3.9.9/lib/failureaccess-1.0.3.jar constituent[7]: file:/D:/apache-maven-3.9.9/lib/gson-2.13.1.jar constituent[8]: file:/D:/apache-maven-3.9.9/lib/guava-33.4.8-jre.jar constituent[9]: file:/D:/apache-maven-3.9.9/lib/guice-5.1.0-classes.jar constituent[10]: file:/D:/apache-maven-3.9.9/lib/httpclient-4.5.14.jar constituent[11]: file:/D:/apache-maven-3.9.9/lib/httpcore-4.4.16.jar constituent[12]: file:/D:/apache-maven-3.9.9/lib/jansi-2.4.2.jar constituent[13]: file:/D:/apache-maven-3.9.9/lib/javax.annotation-api-1.3.2.jar constituent[14]: file:/D:/apache-maven-3.9.9/lib/javax.inject-1.jar constituent[15]: file:/D:/apache-maven-3.9.9/lib/jcl-over-slf4j-1.7.36.jar constituent[16]: file:/D:/apache-maven-3.9.9/lib/jspecify-1.0.0.jar constituent[17]: file:/D:/apache-maven-3.9.9/lib/maven-artifact-3.9.11.jar constituent[18]: file:/D:/apache-maven-3.9.9/lib/maven-builder-support-3.9.11.jar constituent[19]: file:/D:/apache-maven-3.9.9/lib/maven-compat-3.9.11.jar constituent[20]: file:/D:/apache-maven-3.9.9/lib/maven-core-3.9.11.jar constituent[21]: file:/D:/apache-maven-3.9.9/lib/maven-embedder-3.9.11.jar constituent[22]: file:/D:/apache-maven-3.9.9/lib/maven-model-3.9.11.jar constituent[23]: file:/D:/apache-maven-3.9.9/lib/maven-model-builder-3.9.11.jar constituent[24]: file:/D:/apache-maven-3.9.9/lib/maven-plugin-api-3.9.11.jar constituent[25]: file:/D:/apache-maven-3.9.9/lib/maven-repository-metadata-3.9.11.jar constituent[26]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-api-1.9.24.jar constituent[27]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-connector-basic-1.9.24.jar constituent[28]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-impl-1.9.24.jar constituent[29]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-named-locks-1.9.24.jar constituent[30]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-provider-3.9.11.jar constituent[31]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-spi-1.9.24.jar constituent[32]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-transport-file-1.9.24.jar constituent[33]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-transport-http-1.9.24.jar constituent[34]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-transport-wagon-1.9.24.jar constituent[35]: file:/D:/apache-maven-3.9.9/lib/maven-resolver-util-1.9.24.jar constituent[36]: file:/D:/apache-maven-3.9.9/lib/maven-settings-3.9.11.jar constituent[37]: file:/D:/apache-maven-3.9.9/lib/maven-settings-builder-3.9.11.jar constituent[38]: file:/D:/apache-maven-3.9.9/lib/maven-shared-utils-3.4.2.jar constituent[39]: file:/D:/apache-maven-3.9.9/lib/maven-slf4j-provider-3.9.11.jar constituent[40]: file:/D:/apache-maven-3.9.9/lib/org.eclipse.sisu.inject-0.9.0.M4.jar constituent[41]: file:/D:/apache-maven-3.9.9/lib/org.eclipse.sisu.plexus-0.9.0.M4.jar constituent[42]: file:/D:/apache-maven-3.9.9/lib/plexus-cipher-2.0.jar constituent[43]: file:/D:/apache-maven-3.9.9/lib/plexus-component-annotations-2.2.0.jar constituent[44]: file:/D:/apache-maven-3.9.9/lib/plexus-interpolation-1.28.jar constituent[45]: file:/D:/apache-maven-3.9.9/lib/plexus-sec-dispatcher-2.0.jar constituent[46]: file:/D:/apache-maven-3.9.9/lib/plexus-utils-3.6.0.jar constituent[47]: file:/D:/apache-maven-3.9.9/lib/slf4j-api-1.7.36.jar constituent[48]: file:/D:/apache-maven-3.9.9/lib/wagon-file-3.5.3.jar constituent[49]: file:/D:/apache-maven-3.9.9/lib/wagon-http-3.5.3.jar constituent[50]: file:/D:/apache-maven-3.9.9/lib/wagon-http-shared-3.5.3.jar constituent[51]: file:/D:/apache-maven-3.9.9/lib/wagon-provider-api-3.5.3.jar --------------------------------------------------- Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Strings at org.sonatype.nexus.maven.staging.deploy.DeployLifecycleParticipant.getPluginByGAFromContainer(DeployLifecycleParticipant.java:238) at org.sonatype.nexus.maven.staging.deploy.DeployLifecycleParticipant.getNexusMavenPluginFromContainer(DeployLifecycleParticipant.java:182) at org.sonatype.nexus.maven.staging.deploy.DeployLifecycleParticipant.getBuildPluginsNexusMavenPlugin(DeployLifecycleParticipant.java:163) at org.sonatype.nexus.maven.staging.deploy.DeployLifecycleParticipant.afterProjectsRead(DeployLifecycleParticipant.java:95) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:223) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314) Caused by: java.lang.ClassNotFoundException: com.google.common.base.Strings at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:225) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:210) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:205) ... 16 more
最新发布
10-11
你遇到的这个错误是典型的 **Maven 插件依赖冲突或缺失 Guava 类库** 导致的问题。我们来一步步分析并解决。 --- ### ❌ 错误信息解析 ``` Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Strings at org.sonatype.nexus.maven.staging.deploy.DeployLifecycleParticipant.getPluginByGAFromContainer(...) Caused by: java.lang.ClassNotFoundException: com.google.common.base.Strings ``` 这说明: - Maven 在启动时加载了 `nexus-staging-maven-plugin` 插件; - 该插件使用了 Google Guava 的类 `com.google.common.base.Strings`; - 但当前运行环境中 **没有找到 Guava 库(guava.jar)**,导致 `NoClassDefFoundError`; - 虽然你的 Maven 自身依赖中列出了 `guava-33.4.8-jre.jar`,但它可能 **未被正确加载到插件类路径中**,尤其是在旧版本插件与新版本 Maven 兼容性问题中常见。 此外还有这条警告: ``` [WARNING] The POM for org.sonatype.plugins:nexus-staging-maven-plugin:jar:1.7.0 is missing, no dependency information available ``` 表明 Maven 无法读取该插件的元数据(POM),可能是本地缓存损坏或远程仓库不可达。 --- ## ✅ 解决方案 ### ✅ 方案一:清理本地仓库中的 `nexus-staging-maven-plugin` 缓存(推荐第一步) 由于该插件的 POM 文件损坏或不完整,会导致依赖解析失败。 #### 步骤: 删除本地 `.m2` 仓库中相关缓存: ```bash # Windows 命令行执行: rd /s "C:\Users\你的用户名\.m2\repository\org\sonatype\plugins\nexus-staging-maven-plugin" ``` 或者手动进入目录: ``` C:\Users\<your-username>\.m2\repository\org\sonatype\plugins\nexus-staging-maven-plugin\ ``` 将其整个文件夹删除。 然后重新运行构建命令: ```bash mvn clean ``` Maven 将自动重新下载正确的插件及其依赖(包括 Guava)。 --- ### ✅ 方案二:强制指定 `nexus-staging-maven-plugin` 版本,并确保其能获取 Guava 有些项目使用的 `nexus-staging-maven-plugin:1.7.0` 太老,和新版 Maven 不兼容,且不会自动引入 Guava。 #### 修改项目的 `pom.xml` 中插件配置: ```xml <build> <plugins> <!-- 显式声明 nexus-staging 插件 --> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <!-- 推荐使用稳定兼容版 --> <extensions>true</extensions> </plugin> </plugins> </build> ``` > ⚠️ 注意:不要使用 `1.7.0`,它存在已知的类加载问题。降级到 `1.6.13` 更稳定。 --- ### ✅ 方案三:升级为现代发布方式(长期建议) `nexus-staging-maven-plugin` 已逐渐被淘汰。JFrog 和 Sonatype 推荐使用: - 使用 [**Apache Maven Wagon + HTTPS**](https://maven.apache.org/wagon/) 配合 CI/CD 发布; - 或使用 [**GitHub Packages + Actions**](https://docs.github.com/en/packages); - 或使用 [**Maven Central with OSSRH via Gradle or direct deployment using maven-deploy-plugin**] 如果你不是在做正式发布,可以干脆 **禁用该插件**。 #### 临时禁用插件的方法: 运行 Maven 时跳过 `deploy` 阶段相关的生命周期: ```bash mvn clean compile -DskipTests ``` 或者,在 `pom.xml` 中注释掉插件: ```xml <!-- <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> ... </plugin> --> ``` --- ### ✅ 方案四:确认 JavaMaven 兼容性(重要!) 你设置了: ```cmd set JAVA_HOME=C:\Zulu\zulu-21\ ``` 而 `nexus-staging-maven-plugin` 的早期版本(如 1.7.0)对 **Java 9+ 模块系统支持不好**,可能导致类加载失败。 #### ✔️ 推荐组合: | 组件 | 推荐版本 | |------|----------| | Java | Java 11(最稳定)或 Java 17 | | Maven | 3.8.6 ~ 3.9.6(避免最新版某些 bug) | 👉 **建议切换到 Zulu JDK 11 或 17** 来构建 OpenRefine 这类较老的项目。 例如: ```cmd set JAVA_HOME=C:\Zulu\zulu-11\ ``` 再试: ```bash mvn clean ``` --- ### ✅ 方案五:添加 Guava 到 Maven 主类路径(极端情况) 如果上述都不行,可尝试将 Guava 手动放入 Maven 的 `/lib` 目录(不推荐,仅应急): 1. 下载 guava-33.4.8-jre.jar 👉 https://repo1.maven.org/maven2/com/google/guava/guava/33.4.8-jre/guava-33.4.8-jre.jar 2. 复制到: ``` D:\apache-maven-3.9.9\lib\ext\ ``` (或直接放 `lib/` 下) ⚠️ 这违反了模块隔离原则,只应在调试时尝试。 --- ## ✅ 总结:推荐修复流程 1. **关闭终端,重新打开一个新的 CMD/PowerShell** 2. 设置使用 **JDK 11**: ```cmd set JAVA_HOME=C:\Zulu\zulu-11 ``` 3. 删除本地插件缓存: ```cmd rd /s "%USERPROFILE%\.m2\repository\org\sonatype\plugins\nexus-staging-maven-plugin" ``` 4. 修改 `pom.xml`,显式声明稳定版本插件: ```xml <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <extensions>true</extensions> </plugin> ``` 5. 执行: ```cmd mvn clean install -U ``` --- ### 🔍 补充说明 - `com.google.common.base.Strings` 是 Guava 提供的工具类; - 如果 Maven 插件没有正确声明 `<dependency>` 或仓库缺失,就无法加载; - OpenRefine 是一个开源项目,它的某些扩展模块可能用了过时的发布插件;你可以查看其 GitHub issue 是否有类似告。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值