【发布时间】:2014-12-18 17:28:16
【问题描述】:
当我尝试编译我的项目时,我从 sbt 收到以下错误:
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:3: object eclipse is not a member of package org
[error] import org.eclipse.jetty.server.nio.SelectChannelConnector
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:4: object eclipse is not a member of package org
[error] import org.eclipse.jetty.server.{ Server }
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:5: object eclipse is not a member of package org
[error] import org.eclipse.jetty.server.handler.ContextHandlerCollection
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:6: object eclipse is not a member of package org
[error] import org.eclipse.jetty.webapp.WebAppContext
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:7: object eclipse is not a member of package org
[error] import org.eclipse.jetty.servlet.{ DefaultServlet, ServletContextHandler, ServletHolder }
[error] ^
[warn] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:14: This catches all Throwables. If this is really intended, use `case _ : Throwable` to clear this warning.
[warn] case _ => 8080
[warn] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:18: not found: type Server
[error] val server: Server = new Server
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:18: not found: type Server
[error] val server: Server = new Server
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:25: not found: type SelectChannelConnector
[error] val connector = new SelectChannelConnector
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/JettyLauncher.scala:31: not found: type WebAppContext
[error] val webApp = new WebAppContext
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/MongoDBServlet.scala:3: object Akka2Support is not a member of package org.scalatra.akka
[error] import org.scalatra.akka.Akka2Support
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/MongoDBServlet.scala:8: not found: type Akka2Support
[error] class MongoDBServlet extends ScalatraServlet with Akka2Support {
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/MongoDBServlet.scala:13: not found: value ExecutionContext
[error] ExecutionContext.fromExecutorService(Executors.newCachedThreadPool())
[error] ^
[error] /opt/devel/src/sophia/src/main/scala/MongoDBServlet.scala:23: not found: value Future
[error] Future {
[error] ^
[warn] one warning found
[error] 13 errors found
以下是我的build.sbt文件的内容:
scalaVersion := "2.10.4"
mainClass := Some("JettyLauncher")
seq(webSettings :_*)
port in container.Configuration := 8080
seq(assemblySettings: _*)
libraryDependencies += "org.mongodb" %% "casbah-core" % "2.7.3"
libraryDependencies += "org.scalatra" %% "scalatra" % "2.2.0-RC3" cross CrossVersion.binary
libraryDependencies += "org.scalatra" %% "scalatra-akka" % "2.2.0-RC3"
libraryDependencies += "org.scalatra" %% "scalatra-specs2" % "2.2.0" % "test"
libraryDependencies += "org.mortbay.jetty" % "servlet-api" % "3.0.20100224" % "provided"
libraryDependencies += "org.eclipse.jetty" % "jetty-server" % "9.0.0.M5" % "container"
libraryDependencies += "org.eclipse.jetty" % "jetty-util" % "9.0.0.M5" % "container"
libraryDependencies += "org.eclipse.jetty" % "jetty-webapp" % "9.0.0.M5" % "container"
resolvers ++= Seq(
"Sonatype releases" at "http://oss.sonatype.org/content/repositories/releases/",
"Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/",
"Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
"Akka Repo" at "http://akka.io/repository/",
"Web plugin repo" at "http://siasia.github.com/maven2"
)
以下是我的plugins.sbt文件的内容:
addSbtPlugin("com.earldouglas" %% "xsbt-web-plugin" % "0.9.0")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.7.2")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")
我生成了一个 Eclipse 项目,因为我可以查看 .classpath 文件。果然,我发现其中一些类不在classpath中……
如何将这些文件放入类路径?
感谢大家的帮助!
编辑:我决定在 ~/.ivy2/cache/org.eclipse.jetty. 中挖掘我的 JARS 我决定首先查找 SelectChannelConnector 类(我从 sbt 得到的第一个错误)。在org.eclipse.jetty 目录中有一个jetty-server 目录,所以我去了那里。现在在jetty-server 目录中有一堆 ivy xml 文件和两个目录,一个用于 jars,另一个用于 srcs。然后我进入 jars 目录。在 jars 目录中有 4 个 jars:
jetty-server-8.0.0.M3.jar jetty-server-9.0.0.M5.jar
jetty-server-8.1.8.v20121106.jar jetty-server-9.1.0.v20131115.jar
8.* 版本是由于我的build.sbt. 中的版本更改使用命令jar -tf [JAR-FILE]| grep nio' I found that theSelectChannelConnector.classfile exists in the8.jars and not the9.jars. Note that mybuild.sbt specifies the9.0.0.M5`罐子。
我的第一个想法是 sbt 只查看这些 9.* 罐子,如果我删除 8.* 罐子并重新加载我的项目,那么正确的类将被下载到 9.* 罐子中。事实并非如此。
目前我不确定还可以尝试什么。我可以尝试手动添加这些 jar,但这听起来不太好。
感谢大家的帮助!
【问题讨论】:
标签: eclipse scala jetty sbt classpath