有段时间没有初始化新项目了,都是改现有项目。
这次有个新需求,就用最新的 Spring Boot 写,结果用 IDEA 自带的 Spring Initializr 初始化之后,项目里所有依赖都报红。
Project 里也没有任何 Library,Reload 和 Sync 了下 Maven,结果都一样。
想着估计 IDEA 又抽风了,清空缓存(Invalidate Caches)重启还是老样子。
但用本地的 mvn 以及项目初始化之后自带的 mvnw 跑都是正常的。
一查发现原来是旧版本 IDEA 的 Bug。
报错信息是:
1 | Unable to create injector, see the following errors: |
具体原因是:
Spring Initializr 生成的 Maven Wrapper 用的是 Maven 3.10.0,.mvn/wrapper/maven-wrapper.properties 内容如下:
1 | wrapperVersion=3.3.4 |
Maven 3.10 把核心组件从 Plexus XML 配置改成了 JSR-330(@Inject / @Named),DefaultArtifactFactory 也改为通过构造器注入 ArtifactHandlerManager。
而 IDEA 导入项目时默认选中 Use Maven wrapper,会用自己内嵌的 Maven Server(Maven3XServerEmbedder)按旧的 Plexus 方式注册组件。IntelliJ IDEA 2025.3.2 或者 2026.1.4(我两台电脑上的版本)还不支持这套新容器,Guice 找不到 ArtifactHandlerManager 的实现,导入直接失败,依赖自然也就全部无法解析。
命令行直接跑 Maven 3.10 不经过 IDEA 的内嵌器,所以构建正常。
修改方式也很简单:在 IDEA 里改用自带的 Maven 3.9 做导入,不用动项目本身:
- 打开 Settings → Build, Execution, Deployment → Build Tools → Maven
- 把 Maven home path 从
Use Maven wrapper改成 Bundled (Maven 3) - 在 Maven 工具窗口里 Reload 一下项目
或者直接升级 IDEA 到更新的版本。