使用SBT构建scala无法导入java类?

时间:2012-12-19 15:06:55

标签: scala sbt

使用sbt构建一个简单的Scala类时,我遇到了一些奇怪的问题。 代码很简单,我从互联网上复制了一个码头服务器:

object JettyEmbedded {

  def main(args: Array[String]) {
    val server = new org.eclipse.jetty.server.Server(9080)
    val context= new org.eclipse.jetty.webapp.WebAppContext()

    context.setServer(server)
    context.setContextPath("/");
    context.setWar("src/main/webapp")
    server.setHandler(context);

    try {
      server.start()
      server.join()
    } catch {
      case e: Exception => {
        e.printStackTrace()
        System.exit(1)
      }
    }
  }
}

使用SBT和scala 2.9.2编译,我收到以下错误:

[error] /src/main/scala/JettyEmbedded.scala:4: object eclipse is not a member of package org
[error] val server = new org.eclipse.jetty.server.Server(9080)

我可以在build.sbt中看到,我有依赖关系:

"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))

如果我只删除这个有问题的文件并使用容器运行Jetty服务器:从sbt开始,它运行没问题!

2 个答案:

答案 0 :(得分:3)

更改此行:

"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container",

为:

"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container;provided",

解决了这个问题。

sbt不要将“container”类放入编译类路径中,而在Eclipse中则不关心。

答案 1 :(得分:0)

您的build.sbt文件中似乎没有正确的码头依赖关系。

libraryDependencies ++= Seq(
  "org.eclipse.jetty" % "jetty-server" % "8.1.7.v20120910",
  "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910"
)