【问题标题】:How to fix dependency injection when upgrading play framework from 2.5.x to 2.6.x Scala将播放框架从 2.5.x 升级到 2.6.x Scala 时如何修复依赖注入
【发布时间】:2018-02-18 14:39:05
【问题描述】:

我正在尝试从 play 2.5.x 升级到 2.6.3。 (因为 2.5.x 不支持 WS 中的 multipart post。import play.api.libs.ws.DefaultBodyWritables._ throws Exceptions。官方文档中的代码示例不起作用。编译器需要 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) 注入构造函数时出错,java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback 在 db.ConcreteGGDB.(ConcreteGGDB.scala:24) 在 Module.configure(Module.scala:29) (通过模块:com.google.inject.util.Modules$OverrideModule -> 模块) 同时定位 db.ConcreteGGDB

知道这是否与本地 jar 与 2.6.x 不兼容有关吗?或者我需要更改一些代码来执行依赖注入,而不是在 Module.scala 文件中指定?谢谢。

【问题讨论】:

    标签: scala dependency-injection playframework-2.0


    【解决方案1】:

    Why am I getting a NoClassDefFoundError in Java?

    Error injecting constructor, java.lang.NoClassDefFoundError: com/twitter/finagle/http/Method$Get$

    NoClassDefFound 表示您的代码需要一个类,但是 它找不到它。这通常发生在您的项目 传递地依赖于多个版本的库。为了 例如,假设您正在构建项目 A,它依赖于 lib X 和项目 B,它也依赖于 lib X。但是,项目 B 是 针对旧版本的 lib X 构建,它曾经有一个类, 但它不再导出。

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

    A => X(版本 2)

    然后当它运行时,A 调用 B,B 尝试调用 进入 X,但是因为项目现在使用较新的版本而不是 旧版本,找不到需要的类。

    我鼓励您使用 sbt-dependency-graph 来查看哪个 您所依赖的 [library name] 的版本,并确保 您使用的每个库都使用相同版本的 [库名称]。

    本地 jar 似乎有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2016-05-12
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多