【问题标题】:Play framework 2.4 migration, NoSuchMethodError for org.apache.commons.codec.digestPlay framework 2.4 迁移,NoSuchMethodError for org.apache.commons.codec.digest
【发布时间】:2015-11-14 00:58:22
【问题描述】:

您好,我最近从 2.3.8 迁移到 2.4.0(使用 Activator 1.3.6 玩框架)。我有 2 个类似的项目。我升级了第一个没有任何错误。但是,第二个项目给了我这个错误:

NoSuchMethodError: org.apache.commons.codec.digest.DigestUtils.sha1Hex(Ljava/lang/String;)Ljava/lang/String;

没有指向我的代码的堆栈跟踪。在网络调试器中它说

没有可用的来源,这里是异常堆栈跟踪:

我无法弄清楚出了什么问题。有谁之前经历过这个吗? 这是我在(成功)编译和运行应用程序后看到的屏幕截图:

我按照这里给出的步骤操作:

https://www.playframework.com/documentation/2.4.x/Migration24 https://www.playframework.com/documentation/2.4.x/JavaEbean

感谢任何帮助。感谢您的宝贵时间。

[更新] 当我禁用进化插件时,错误消失了。每当我在 applicatin.conf 中将此设置为 false

play.evolutions.enabled=false

该应用程序似乎工作。我相信进化插件存在一些问题。不知道如何解决这个问题。

更新: 尽管应用程序现在似乎正在运行,但它在从资产调用任何文件时给了我同样的错误。因此,我的样式没有被编译。 在此处查看浏览器控制台日志:

我正在记录来自 Global.java 的错误消息并输出错误。终端中的输出如下:

我的 build.sbt 如下:

name := """PROJECT_NAME"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava,PlayEbean,SbtWeb)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.29"

libraryDependencies += "commons-codec" % "commons-codec" % "1.10"

libraryDependencies += evolutions

includeFilter in (Assets, LessKeys.less) := "*.less"

excludeFilter in (Assets, LessKeys.less) := "_*.less"

我在 Global.java 中登录的错误的堆栈跟踪:

[ERROR] MESSAGE: java.lang.NoSuchMethodError: org.apache.commons.codec.digest.DigestUtils.sha1Hex(Ljava/lang/String;)Ljava/lang/String;  CAUSED BY : java.lang.NoSuchMethodError: org.apache.commons.codec.digest.DigestUtils.sha1Hex(Ljava/lang/String;)Ljava/lang/String; STACK TRACE BELOW: 

play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:498)
akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
play.utils.Threads$.withContextClassLoader(Threads.scala:21)
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104)
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103)
scala.Option.map(Option.scala:146)
play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103)
play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
play.api.libs.iteratee.DoneIteratee$$anonfun$mapM$2.apply(Iteratee.scala:741)
scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

【问题讨论】:

    标签: java playframework


    【解决方案1】:

    您使用的似乎是旧版本的 Apache Commons,它还没有 sha1Hex() 函数。通过将 commons-codec 1.10 版添加到您的 build.sbt 来尝试更新的。

    libraryDependencies ++= Seq(
      ...
      "commons-codec" % "commons-codec" % "1.10",
      ...
    )
    

    【讨论】:

    • 嗨,克里斯,感谢您的回复。我发现 activator clean、cleanFiles、clean-files 命令实际上并没有清理所有的类文件。尝试做一个 *.class 搜索,你会看到。可能在以前的一些编译中,上述库存在一些问题,导致出现此问题。我最终删除了所有的类文件。重新编译后似乎运行良好。
    • 我注意到,尽管对于资产文件请求,它在堆栈跟踪中给了我一个 404 和相同的错误。我尝试按照您的建议添加 common-io,但似乎不起作用。
    • 对不起!我放错了库:不是io,而是编解码器。我编辑了我的答案。
    • 我添加了commons-codec,还是不行!检查问题中的更新。
    • 即使我在 public/images/ 中添加一个测试图像文件并尝试使用 url 访问它,它也会给我同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多