运行“play”时会发生java.lang.NoSuchMethodError

时间:2014-04-27 07:57:40

标签: scala playframework sbt

我正在尝试运行我从git clone https://github.com/djonmayer/play21-osm.git获得的播放项目的克隆

我安装了2.2.2版本和scala版本2.10.4。

当我在项目克隆到的目录中键入play时,我收到以下错误:

java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Lscala/collection/immutable/StringOps;
    at sbt.ConsoleLogger$.<init>(ConsoleLogger.scala:129)
    at sbt.ConsoleLogger$.<clinit>(ConsoleLogger.scala)
    at sbt.StandardMain$.<init>(Main.scala:52)
    at sbt.StandardMain$.<clinit>(Main.scala)
    at sbt.xMain.run(Main.scala:26)
    at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:57)
    at xsbt.boot.Launch$.withContextLoader(Launch.scala:77)
    at xsbt.boot.Launch$.run(Launch.scala:57)
    at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
    at xsbt.boot.Launch$.launch(Launch.scala:65)
    at xsbt.boot.Launch$.apply(Launch.scala:16)
    at xsbt.boot.Boot$.runImpl(Boot.scala:32)
    at xsbt.boot.Boot$.main(Boot.scala:21)
    at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Lscala/collection/immutable/StringOps;

如果我运行play clean,情况就是如此。我已经读过这可能是一个依赖项问题所以我尝试将行scalaVersion := "2.10.4"添加到Build.scala的play.Project.settings部分并单独添加到build.sbt文件中。它没用。

2 个答案:

答案 0 :(得分:8)

我试着把它放在评论中,但这是不可读的。

谢谢,zeppaman。看起来这个问题与运行在旧版Play中创建的Play Framework项目有关。通过查看已提交升级到新游戏版本的另一个项目,我做了以下更改。

在build.properties中:

sbt.version=0.12.2

成为:

sbt.version=0.13.0

在plugins.sbt中:

addSbtPlugin("play" % "sbt-plugin" % "2.1.1")

成了:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.2")

这使我能够进行更新然后抛出错误:

[error] Modules were resolved with conflicting cross-version suffixes in {file:/Users/michaelrichardson/Documents/Play/play21-osm/}play21-osm:
[error]    org.scala-stm:scala-stm _2.10, _2.10.0
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) Conflicting cross-version suffixes in: org.scala-stm:scala-stm

我在Build.scala中更改了一行:

    "com.typesafe.play" %% "play-slick" % "0.3.2"

成了:

    "com.typesafe.play" %% "play-slick" % "0.5.0.2-SNAPSHOT"

EXTRA:这会将错误更改为:

[info] Resolving com.typesafe.play#play-slick_2.10;0.5.0.2-SNAPSHOT ...
[warn]  module not found: com.typesafe.play#play-slick_2.10;0.5.0.2-SNAPSHOT
[warn] ==== Typesafe Releases Repository: tried
[warn]   http://repo.typesafe.com/typesafe/releases/com/typesafe/play/play-slick_2.10/0.5.0.2-SNAPSHOT/play-slick_2.10-0.5.0.2-SNAPSHOT.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.typesafe.play#play-slick_2.10;0.5.0.2-SNAPSHOT: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) sbt.ResolveException: unresolved dependency: com.typesafe.play#play-slick_2.10;0.5.0.2-SNAPSHOT: not found

更新:解决了未解决的依赖

依赖性未解决的问题似乎可能是由于我的本地sbt / ivy存储库被破坏了。见unresolved dependency: com.typesafe.play#play-slick_2.10;0.6.0.1: not found

答案 1 :(得分:1)

这类问题通常与两个类似的问题有关:

  • 缺少同一类的jar
  • 同一个班级进入多个罐子

因此,请检查scala和play版本是否兼容,以及是否已包含已包含缺少方法的类的jar。