正如问题标题所示。我用 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,因此该类应该可以访问。错误的原因可能是什么?
最佳答案
我在不同的设置下遇到了完全相同的错误消息。我在独立应用程序中使用 Spray-client(无 JBoss)。
原因是,虽然我使用的是应该在 Scala 2.11 上运行的 Spray 1.3.1,但我实际上从 Maven 存储库(我在项目中使用 Maven)获得的版本是针对 Scala 2.10 构建的。查看POM如果你想亲自看看。
所以,我所做的修复是
- 将 Spray 存储库添加到存储库列表
<repositories> <repository> <id>spray</id> <name>Spray IO</name> <url>http://repo.spray.io</url> </repository> </repositories>
- 切换到 Spray 1.3.1 的每晚(?)版本
<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现在还建议使用该版本。
关于web-applications - 运行 Spray-servlet war 给出 java.lang.NoClassDefFoundError : scala/collection/GenTraversableOnce$class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460872/