2012-12-19 21 views
5

使用sbt构建一个简单的Scala类时,我遇到了一些奇怪的问题。 的代码是足够简单,我从互联网上复制到启动码头服务器:用SBT构建的scala无法导入java类?

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启动,它运行没有问题!

+0

使它变得陌生,它在Eclipse/Scala-IDE中编译和运行良好 – Wudong

+0

你确定你的sbt类路径上有码头吗? –

+0

你有没有码头作为你的构建文件的依赖? –

回答

3

改变这一行:

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

到:

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

解决了这个问题。

sbt不要把“容器”类放到编译类路径中,而在Eclipse中它不关心。

+1

我不得不退出sbt并再次运行它。谢谢!现在工作 – kirhgoff

0

看起来您没有build.sbt文件中正确的码头依赖关系。

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

请参阅我编辑的帖子。 – Wudong

+0

你的依赖关系仍然是错误的。尝试用我的答案替换你的版本。 –

+1

他们究竟有什么问题?你能解释一下这个区别吗?我遇到了同样的问题 – kirhgoff

相关问题