繁体   English   中英

将Play框架从2.5.x升级到2.6.x时如何解决依赖注入

[英]How to fix dependency injection when upgrading play framework from 2.5.x to 2.6.x Scala

我正在尝试从play 2.5.x升级到2.6.3。 (因为2.5.x不支持WS中的多篇文章。import play.api.libs.ws.DefaultBodyWritables._引发异常。官方文档中的代码示例不起作用。编译器需要Body Writables,而后者不直到2.6.x为止)

所以我将plugin.sbt版本更改为2.6.3,并将sbt升级到0.13.15。 并编辑build.sbt文件以添加guice和json。 该项目编译良好。 但是,当我开始使用sbt run并访问http:// localhost:9000时 ,它抛出了一堆与本地lib /目录中的jar文件有关的异常。 相同的代码在2.5.x下也可以正常工作。

这是例外:

1)在db.ConcreteGGDB。(ConcreteGGDB.scala:24)处的db.ConcreteGGDB。(ConcreteGGDB.scala:24)处注入构造函数java.lang.NoClassDefFoundError:com / google / common / util / concurrent / FutureFallback(通过模块: com.google.inject.util.Modules $ OverrideModule->模块),同时查找db.ConcreteGGDB

任何与本地jar相关的想法都与2.6.x不兼容吗? 还是我需要更改一些代码来进行依赖注入,而不是在Module.scala文件中指定? 谢谢。

为什么在Java中收到NoClassDefFoundError?

注入构造函数java.lang.NoClassDefFoundError时出错:com / twitter / finagle / http / Method $ Get $

NoClassDefFound意味着您的代码需要一个类,但找不到它。 当您的项目临时依赖于一个库的多个版本时,通常会发生这种情况。 例如,假设您正在构建依赖于lib X的项目A,并且也依赖于lib X的项目B。但是,项目B是针对旧版本的lib X构建的,该版本以前具有一个类,但它不再出口。

A => B => X(版本1)

A => X(版本2)

然后在运行时,A调用B,B尝试调用X,但是由于项目现在使用的是较新版本而不是较旧版本,因此无法找到所需的类。

我鼓励您使用sbt-dependency-graph来传递地依赖于哪个版本的[库名称],并确保您使用的每个库都使用相同的[库名称]版本。

看起来像本地jar的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM