运行spray-servlet war给出java.lang.NoClassDefFoundError:scala / collection / GenTraversableOnce $ class

时间:2014-05-04 19:52:02

标签: web-applications spray

正如问题标题一样。我用喷雾servlet构建.war。我尝试在jetty和jboss-7上部署它,但两者都给了我同样的错误:

java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class
at spray.http.Uri$Query.<init>(Uri.scala:496)
at spray.http.Uri$Query$Empty$.<init>(Uri.scala:575)
at spray.http.Uri$Query$Empty$.<clinit>(Uri.scala)
at spray.http.parser.UriParser.<init>(UriParser.scala:37)
at spray.http.Uri$.apply(Uri.scala:231)
at spray.http.Uri$.apply(Uri.scala:203)
at spray.http.Uri$.<init>(Uri.scala:194)
at spray.http.Uri$.<clinit>(Uri.scala)
at spray.http.Uri$Path$.build$1(Uri.scala:427)
at spray.http.Uri$Path$.apply(Uri.scala:428)
at spray.servlet.ConnectorSettings$.fromSubConfig(ConnectorSettings.scala:52)
at spray.servlet.ConnectorSettings$.fromSubConfig(ConnectorSettings.scala:46)
at spray.util.SettingsCompanion.apply(SettingsCompanion.scala:50)
at spray.servlet.Initializer$$anonfun$contextInitialized$1.apply$mcV$sp(Initializer.scala:40)
at akka.util.Switch.transcend(LockUtil.scala:27)
at akka.util.Switch.switchOn(LockUtil.scala:48)
at spray.servlet.Initializer.contextInitialized(Initializer.scala:33)
....

我检查了.war并且有WEB-INF / lib / scala-library-2.11.0.jar,因此该类应该是可访问的。可能是错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

我遇到了使用不同设置的相同错误消息。我在一个独立的应用程序中使用了spray-client(没有JBoss)。

原因是虽然我使用Spray 1.3.1,它应该在Scala 2.11上运行,我实际上从Maven仓库获得的版本(我在我的项目中使用Maven)是针对Scala 2.10构建的。如果您想亲眼看看,请查看POM

所以,我采取的措施是

  1. 将Spray repo添加到存储库列表
  2. <repositories>
        <repository>
            <id>spray</id>
            <name>Spray IO</name>
            <url>http://repo.spray.io</url>
        </repository>
    </repositories>
    
    1. 切换到Spray 1.3.1的夜间(?)版本
    2. <dependency>
          <groupId>io.spray</groupId>
          <artifactId>spray-client_2.11</artifactId>
          <version>1.3.1-20140423</version>
      </dependency>
      

      对于SBT来说

      "io.spray" %% "spray-client" % "1.3.1-20140423"
      

      更新:不确定之前是否存在或最近刚添加它,但Spray homepage现在还建议使用该版本。