当前位置: 首页 > article >正文

问题记录(一)——引入WebSocket依赖时的不兼容或冲突问题

文章目录

  • 引入WebSocket依赖时的不兼容或冲突问题
    • 问题描述
    • 解决步骤
    • 总结

引入WebSocket依赖时的不兼容或冲突问题

问题描述

进行网页聊天室项目的准备工作时,引入WebSocket依赖失败,报错信息

org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) [Guice/ErrorInjectingConstructor]: NoSuchMethodError: DefaultModelValidator: method 'void <init>()' not found
  at CustomModelValidator.<init>(CustomModelValidator.java:36)
  while locating CustomModelValidator
  at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]]
      \_ installed by: WireModule -> PlexusBindingModule
  while locating ModelValidator annotated with @Named("ide")

Learn more:
  https://github.com/google/guice/wiki/ERROR_INJECTING_CONSTRUCTOR

1 error

======================
Full classname legend:
======================
CustomModelValidator:  "org.jetbrains.idea.maven.server.embedder.CustomModelValidator"
DefaultModelValidator: "org.apache.maven.model.validation.DefaultModelValidator"
ModelValidator:        "org.apache.maven.model.validation.ModelValidator"
Named:                 "com.google.inject.name.Named"
PlexusBindingModule:   "org.eclipse.sisu.plexus.PlexusBindingModule"
WireModule:            "org.eclipse.sisu.wire.WireModule"
========================
End of classname legend:
========================

      role: org.apache.maven.model.validation.ModelValidator
  roleHint: ide
我刚创建了一个Spring的项目,刷新Maven引入依赖时发生如下错误

解决步骤

一、步骤描述

  1. 问题切入)通过AI了解到这种报错形式通常是因为依赖冲突或版本不兼容
  2. 尝试解决,寻找配置项Settings → Maven(Build,Execution,Deployment → Build Tools → Maven) → Maven home path
  3. 修改配置项Maven home path配置项是一个下拉菜单,有两个可选项:Use Maven wrapperBundled(Maven),将Use Maven wrapper 修改为 Bundled(Maven)
  4. 刷新Maven)依赖引入成功,没有报错

二、截图演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

将解决方案提供给AI,让其分析:

  • 提问:这个问题我已经解决了,我的解决方案是打开setting,找到Maven,找到配置项:Maven home path,这个配置项是一个下拉菜单,其中有两个配置项,我将其中一个Use Maven wrapper更改为Bundled(Maven),请问为什么?这个配置项什么含义?

  • AI回答

    你提到的配置项 Maven home path 是 IntelliJ IDEA 中用于指定 Maven 安装路径的设置。这个配置项决定了 IntelliJ IDEA 使用哪个 Maven 实例来构建和管理项目。你提到的两个选项 Use Maven wrapperBundled (Maven) 分别代表不同的 Maven 来源。下面详细解释它们的含义以及为什么切换配置项可以解决问题。


    1. Use Maven wrapper
    • Maven Wrapper 是 Maven 提供的一个工具,允许项目自带一个特定版本的 Maven,而不依赖于系统全局安装的 Maven。
    • 如果你的项目中包含 mvnw(Maven Wrapper 的可执行文件)和 .mvn/wrapper 目录(包含 maven-wrapper.propertiesmaven-wrapper.jar),那么 IntelliJ IDEA 会检测到并使用这个 Wrapper。
    • 优点
      • 确保项目使用特定版本的 Maven,避免因全局 Maven 版本不同而导致的问题。
      • 方便团队协作,所有开发者使用相同的 Maven 版本。
    • 缺点
      • 如果 Wrapper 配置的 Maven 版本与项目依赖不兼容,可能会导致构建失败。
      • 如果 Wrapper 文件损坏或配置错误,可能会导致问题。

    1. Bundled (Maven)
    • Bundled (Maven) 是 IntelliJ IDEA 自带的 Maven 版本。IDEA 会自带一个默认的 Maven 版本,通常是一个稳定且兼容性较好的版本。
    • 优点
      • 无需额外配置,开箱即用。
      • 通常是一个经过测试的稳定版本,兼容性较好。
    • 缺点
      • 可能不是最新的 Maven 版本。
      • 如果项目需要特定版本的 Maven,使用 Bundled 版本可能会导致问题。

    为什么切换配置项可以解决问题?

    在你的情况下,问题可能是由于以下原因之一:

    1. Maven Wrapper 配置的 Maven 版本与项目依赖不兼容

      • 如果你的项目使用了 Maven Wrapper,但 Wrapper 配置的 Maven 版本与项目依赖不兼容(例如,某些插件或依赖需要更高或更低版本的 Maven),就会导致构建失败。
      • 切换到 Bundled (Maven) 后,IDEA 使用自带的稳定版本,可能解决了版本不兼容的问题。
    2. Maven Wrapper 文件损坏或配置错误

      • 如果 mvnw 文件或 .mvn/wrapper 目录中的配置文件有问题(例如,指向了一个不存在的 Maven 版本),也会导致构建失败。
      • 切换到 Bundled (Maven) 后,IDEA 绕过了 Wrapper,直接使用自带的 Maven,从而避免了这个问题。
    3. Maven Wrapper 下载的 Maven 版本有问题

      • 如果 Maven Wrapper 需要下载一个特定版本的 Maven,但下载过程中出现问题(例如网络问题或下载的版本损坏),也会导致构建失败。
      • 切换到 Bundled (Maven) 后,IDEA 使用自带的 Maven,避免了下载问题。

    如何选择正确的配置项?

    • 使用 Maven Wrapper

      • 如果你的项目需要特定版本的 Maven,或者你希望确保所有开发者使用相同的 Maven 版本,建议使用 Use Maven wrapper
      • 确保 mvnw 文件和 .mvn/wrapper 目录配置正确,并且 Wrapper 指定的 Maven 版本与项目依赖兼容。
    • 使用 Bundled (Maven)

      • 如果你不需要特定版本的 Maven,或者遇到 Wrapper 相关的问题,可以切换到 Bundled (Maven)
      • 这是一个快速解决问题的方案,但可能会隐藏一些与 Maven 版本相关的潜在问题。

    总结

    你通过将 Maven home pathUse Maven wrapper 切换到 Bundled (Maven) 解决了问题,可能是因为 Maven Wrapper 配置的 Maven 版本与项目依赖不兼容,或者 Wrapper 文件本身存在问题。切换到 Bundled 版本后,IDEA 使用自带的稳定 Maven 版本,避免了这些问题。

    如果你希望长期使用 Maven Wrapper,可以检查并修复 Wrapper 的配置,确保它指向一个与项目兼容的 Maven 版本。

我的总结:Use Maven wrapper是确保项目使用特定版本的Maven,但是有些依赖(如我想引入的WebSocket)可能与 Wrapper 配置的 Maven 版本与项目依赖不兼容,进而导致类似上面的报错信息。当我们将Maven home path项更改为Bundled(Maven),就可能解决上述的版本不兼容问题



http://www.kler.cn/a/594776.html

相关文章:

  • 2025最新电脑IP地址修改方法:Win系统详细步骤
  • C++ - 从零实现Json-Rpc框架-1(JsonCpp Muduo 异步操作)
  • 四、小白学JAVA-石头剪刀布游戏
  • YZi Labs 谈对 Plume 的投资:利用区块链创造现实价值的典范项目
  • 【Linux】Makefile秘籍
  • 前端技巧:精准判断登录设备是移动端还是 PC 端
  • 数据可视化(matplotlib)-------辅助图标的设置
  • 一键融合,尽享全能生活:三网融合系统在酒店弱电方案中的应用探索
  • 【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(2)软件部分
  • NineData云原生智能数据管理平台新功能发布|2025年2月版
  • ​《引力透镜:Relax Max用哈勃光学系统重构排泄物天体力学》​
  • MapStruct 使用教程
  • 技术分享 | MySQL内存使用率高问题排查
  • 如何用C++封装纯C写的函数库,如何处理C函数调用返回错误
  • OpenNJet:下一代云原生应用引擎,支持动态配置与高效管理,简化运维任务,提升应用灵活性与安全性。
  • 【Docker入门】用Docker启动项目
  • Leetcode 378. 有序矩阵中第 K 小的元素 二分查找
  • 【uni-app】集成SQLite,无服务数据库
  • 上海蒂正科技有限公司:技术驱动数字化,打造高端企业门户新标杆
  • Web-Machine-N7靶机攻略