You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Play! 3.0.2运行时出现NoSuchMethodError:Providers.guicify方法缺失

解决Play! 3.0.2升级后运行时NoSuchMethodError(Guice guicify方法)问题

从Play! 2.6.0升级到3.0.2版本,修复编译错误启动后,访问localhost:9000触发以下运行时错误:

NoSuchMethodError: 'com.google.inject.Provider com.google.inject.util.Providers.guicify(javax.inject.Provider)'
play.api.inject.guice.GuiceableModuleConversions$$anon$4.$anonfun$configure$3(GuiceInjectorBuilder.scala:376)
     scala.Option.foreach(Option.scala:437)
     play.api.inject.guice.GuiceableModuleConversions$$anon$4.$anonfun$configure$2(GuiceInjectorBuilder.scala:375)
     play.api.inject.guice.GuiceableModuleConversions$$anon$4.$anonfun$configure$2$adapted(GuiceInjectorBuilder.scala:372)
     scala.collection.immutable.List.foreach(List.scala:334)
...

问题根源

核心原因是Guice版本与Play! 3.0.2不兼容:

  • Play! 3.0.2官方依赖Guice 6.x版本,而你通过scala-guice 7.0.0引入了Guice 7.x
  • Guice 7.x完成Jakarta EE迁移,将javax.inject包替换为jakarta.inject,导致Providers.guicify方法的参数类型从javax.inject.Provider变为jakarta.inject.Provider
  • Play! 3.0.2的Guice模块编译时依赖javax.inject版本的方法签名,运行时加载Guice 7.x后找不到对应方法,触发NoSuchMethodError
  • 额外风险:firebase-admin 5.9.0可能自带旧版Guice依赖,加剧类路径冲突

解决方案

1. 对齐Play!官方依赖版本

修改build.sbt,将scala-guice降级到与Play! 3.0.2兼容的版本(对应Guice 6.x):

// 替换原scala-guice依赖
libraryDependencies += "net.codingwell" %% "scala-guice" % "6.0.0"

确保不要启用手动添加的Guice 7.0.0依赖,让Play!的guice模块管理核心Guice版本。

2. 排除第三方依赖中的旧版Guice

给firebase-admin排除自带的Guice依赖,避免版本冲突:

libraryDependencies += "com.google.firebase" % "firebase-admin" % "5.9.0" exclude("com.google.inject", "guice")

3. 彻底清理并重新构建

执行以下命令确保缓存和构建产物完全清理:

sbt clean
rm -rf ~/.ivy2/cache ~/Library/Caches/Coursier
sbt reload compile run

4. 验证依赖一致性

执行sbt dependencyTree,确认所有Guice相关依赖统一为6.x版本,无7.x或更低版本的冲突项。

内容的提问来源于stack exchange,提问作者xinu3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:35:09