【问题标题】:classnotfound exception when deploying scala class on GAE在 GAE 上部署 scala 类时出现 classnotfound 异常
【发布时间】:2013-07-10 21:34:07
【问题描述】:

当我尝试将 Scala 类部署到 GAE 时,我在日志中收到此错误:

servlet 未捕获的异常 java.lang.NoClassDefFoundError: scala/Predef$ 在 com.myapp.controller.FirstTest.getString(FirstTest.scala:7) 在 com.gogofindit.myapp.RedirectController.displaySearch(RedirectController.java:20)

应用程序在本地运行,只是当我部署到应用程序引擎时收到错误。

根据此文档支持 Scala:https://developers.google.com/appengine/docs/

这是 Scala 类:

class FirstTest {

  def getString = {

    println("In scala")

    "search"
  }

}

我是否需要更新项目中的配置文件以便编译 Scala 类?

【问题讨论】:

  • 类路径上有 scala 库吗?
  • @om-nom-nom 是的,我更新了问题

标签: java google-app-engine scala noclassdeffounderror


【解决方案1】:

无需任何额外努力即可支持 Scala。 但是应该在 pom.xml 或项目配置中将您的 scala 类添加到编译过程中(例如,通过在 Eclipse 中添加性质)。 看看是否可以在 bin/ 或 target/classes 中找到已编译的类,在 java 类旁边。

【讨论】:

  • 是的,Scala 正在本地编译,是否需要更新一些内容以便在 GAE 产品上编译该类?
  • 一点也不,你在 GAE prod 上什么都不编译,只需要部署战争,比如说。所以只要在你的 WEB-INF/classes 中你能找到你的 scala 东西,一切都应该发送到 GAE。一切都在开发服务器上运行吗?
  • 你在类路径中有一个 scala 库,但你确定你在最后的战争中也有它在 WEB-INF/lib 中吗?因为实际上找到并调用了您的 scala 类。没有找到的是 scala.Predef - 来自 scala 标准库的对象。
  • 是的,这是我的问题,我不知道 web-inf/lib 中的文件实际上已部署到 appengine。所以 GAE 在尝试编译 scala 类时会检查这个文件夹?
  • 不,scala 类已经编译。只有在运行时,您才使用在 scala.Predef 对象中定义的方法 println。这个在 scala-library.jar 中,GAE 在标准位置寻找它:WEB-INF/lib。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多