MAC下springboot环境配置

本文介绍了解决SpringBoot项目中因Maven版本过高导致的问题,通过将Maven版本从3.8.6降级到3.8.1,并配置了多个国内镜像源,最终成功解决了构建错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

今天构建一个springboot工程,倒入到idea中,出现以下错误:

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

1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void <init>()' not found
  at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)
  while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator
  at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value="ide")

1 error
      role: org.apache.maven.model.validation.ModelValidator
  roleHint: ide

在网上查询发现是MAVEN版本问题,我之前使用的版本是3.8.6:

解决方案 

常见方案是修改maven的版本,从3.8.6调整成3.8.1;调整如下:

调整完成后,问题确实解决了,效果如下:

MAVEN配置

既然要切换maven版本,那么这里也记录一下在mac上,修改maven版本的操作:

第一步,下载3.8.1版本的maven,由于网络比较慢,可能需要多次重试,下载地址:

https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/

https://maven.apache.org/download.cgi

第二步,解压文件到指定目录中,并且开始配置mvn,核心是settings.xml(目录地址apache-maven-3.8.1/conf),这个配置主要使用国内厂商的maven仓库,这里感谢阿里云提供了一套稳定的maven仓库: 

  <mirrors>

     <mirror>

        <id>alimaven</id>

        <name>aliyun maven</name>

        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

        <mirrorOf>central</mirrorOf>

    </mirror>

    <mirror>

      <id>maven.net.cn</id>

      <name>Mirror from Maven in china</name>

      <url>http://maven.net.cn/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

    <mirror>

      <id>central</id>

      <name>Maven Repository Switchboard</name>

      <url>http://repo1.maven.org/maven2/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

    <mirror>

      <id>repo2</id>

      <name>Mirror from Maven Repo2</name>

      <url>http://repo2.maven.org/maven2/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

    <mirror>

      <id>sprintio</id>

      <mirrorOf>central</mirrorOf>

      <name>Human Readable Name for this Mirror.</name>

      <url>https://repo.spring.io/libs-snapshot/</url>

    </mirror>

    <mirror>

      <id>google</id>

      <name>google maven</name>

      <url>https://maven.google.com/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

  </mirrors>

第三步,修改mac的配置文件,涉及2个文件:

修改 .bash_profile 

// 回到用户目录

cd ~

// 查看.bash_profile,注意这是一个隐藏文件,需要查看所有文件可以使用 ls -al

vim  .bash_profile 

// 修改配置,我这里安装了maven和mysql

export M2_HOME=/Users/用户目录/install/apache-maven-3.8.1

export PATH=$PATH:$M2_HOME/bin

PATH=$PATH:/usr/local/mysql/bin:$MAVEN_HOME/bin

// 编辑完成后,执行命令,这个命令只是在当前shell生效

source .bash_profile

修改 .zshrc

// 回到用户目录

cd ~

// 查看.zshrc,如果不存在就创建一个.zshrc

vim .zshrc

// 修改配置,这个配置修改后,以后.bash_profile这个配置在关闭窗口重新打开也会有效

source ~/.bash_profile

 

 

<think>我们正在解决一个关于Guice依赖注入的问题,具体错误是`ErrorInjectingConstructor`和`NoSuchMethodError`,指出`DefaultModelValidator`的`<init>`方法(即构造函数)没有找到。错误信息中还提到了`CustomModelValidator`类。根据引用[1]和[2],这个错误发生在IDEA中更新Maven或者使用Spring Boot创建项目时,Maven依赖加载失败。错误堆栈表明,在注入`CustomModelValidator`的构造函数时,尝试调用`DefaultModelValidator`的默认构造函数(无参构造函数)时找不到该方法。可能的原因:1.版本不兼容:可能使用的Maven版本与IDEA插件或项目依赖的某个库版本不匹配。`DefaultModelValidator`类在不同版本的Maven中可能有不同的构造函数签名。 2.依赖冲突:项目依赖中可能存在多个版本的Maven核心库(如maven-model-builder或maven-core),导致加载了错误的版本。 解决方案: 1. **检查Maven版本**:确保IDEA中使用的Maven版本与项目兼容。尝试更换Maven版本(比如使用Maven3.6.3或3.8.1等稳定版本)。2.**清理本地Maven仓库**:有时本地仓库中的依赖损坏或版本混乱会导致此类问题。可以删除本地仓库中与Maven核心相关的目录(如`org/apache/maven`),然后重新下载。3.**检查依赖冲突**:使用`mvndependency:tree`命令分析项目依赖,查看是否有多个版本的Maven核心库被引入。如果有,通过`<exclusion>`排除多余的版本。4.**更新IDEA和Maven插件**:确保IDEA和Maven插件是最新版本,或者回退到已知稳定的版本。具体步骤(在IDEA中): 1.打开IDEA的设置(Settings),在“Build,Execution,Deployment”>“BuildTools”> “Maven”中,检查Mavenhome path的版本。尝试更换为其他版本(如 bundled(Maven3)或自己下载的版本)。2.如果更换Maven版本无效,尝试清理本地仓库:关闭IDEA,删除本地Maven仓库(默认在用户目录下的`.m2/repository`),然后重新打开IDEA并重新加载项目。 3.如果问题仍然存在,检查项目的pom.xml文件,查看是否有依赖引入了Maven核心库(如maven-core,maven-model-builder等)。如果有,尝试排除冲突的依赖。 例如,在pom.xml中排除依赖: ```xml<dependency><groupId>some.group</groupId><artifactId>some-artifact</artifactId><version>some-version</version><exclusions><exclusion><groupId>org.apache.maven</groupId><artifactId>maven-core</artifactId></exclusion><exclusion><groupId>org.apache.maven</groupId><artifactId>maven-model-builder</artifactId></exclusion></exclusions></dependency> ```4.如果上述方法都不行,可以尝试重置IDEA的缓存:File ->InvalidateCaches/ Restart。注意:该错误通常是由于环境问题(Maven版本、依赖冲突)引起的,而不是代码本身的问题,因此重点应放在环境配置和依赖管理上。§§相关问题§§1.如何解决Guice依赖注入中的`NoSuchMethodError`错误? 2.在Maven项目中如何排除冲突的依赖? 3.如何更新IDEA中的Maven版本?</think>### 解决 Guice 依赖注入中的 NoSuchMethodError 异常 您遇到的 `ErrorInjectingConstructor` 和 `NoSuchMethodError` 异常通常由 **Maven 核心库版本冲突**引起,具体是 `DefaultModelValidator` 类的构造函数签名不匹配导致。以下是系统性的解决方案: #### 解决方案步骤 1. **检查 Maven 版本兼容性** - 问题根源:IDEA 内置 Maven 插件与本地 Maven 版本不兼容 - 操作: - 打开 IDEA 设置:`File > Settings > Build, Execution, Deployment > Build Tools > Maven` - 将 **Maven home path** 改为与项目匹配的版本(推荐 3.6.3+) - 在终端执行 `mvn -v` 验证版本一致性 2. **清理 Maven 本地仓库** ```bash # 删除损坏的依赖缓存 rm -rf ~/.m2/repository/org/apache/maven/maven-core/ rm -rf ~/.m2/repository/org/apache/maven/maven-model-builder/ ``` 重新执行 Maven 更新(IDEA 中右键点击项目 → Maven → Reload Project) 3. **排除冲突依赖(关键步骤)** 在 `pom.xml` 中添加以下排除规则: ```xml <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> <version>3.8.1</version> <!-- 保持与其他依赖一致 --> <exclusions> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-model-builder</artifactId> </exclusion> </exclusions> </dependency> ``` 4. **重置 IDEA 配置** - 删除项目目录下的 `.idea` 文件夹和 `*.iml` 文件 - 重启 IDEA 并重新导入项目 #### 技术原理 该异常源于 **字节码签名不匹配**: 1. Guice 尝试实例化 `CustomModelValidator` 时调用 `DefaultModelValidator.<init>()` 2. 但实际加载的 `maven-model-builder` JAR 中构造函数签名可能是 `(ModelValidatorContext)` 3. 版本冲突导致 JVM 找不到预期的无参构造方法[^1][^2] #### 验证是否解决 在 IDEA 终端执行: ```bash mvn help:effective-pom | grep maven-core ``` 检查输出中是否只有一个统一版本(如 3.8.1) > **注意**:若使用 Spring Boot,还需检查 `spring-boot-starter-parent` 的兼容性,建议保持 Maven 插件版本 ≤ 3.6.3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值