SBT、Jetty和Servlet 3.0

16

我有一个非常微小的问题。

我有以下的build.sbt文件:

name := "Tueet"

libraryDependencies += "org.eclipse.jetty" % "jetty-webapp" % "8.1.2.v20120308"

在执行 sbt update 后,我收到以下信息:

[info] Set current project to Tueet (in build file:/C:/dev/tueet/)
[info] Updating {file:/C:/dev/tueet/}default-d5e982...
[info] Resolving org.scala-lang#scala-library;2.9.1 ...
[info] Resolving org.eclipse.jetty#jetty-webapp;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-xml;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-util;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-servlet;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-security;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-server;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty.orbit#javax.servlet;3.0.0.v201112011016 ...
[info] Resolving org.eclipse.jetty#jetty-continuation;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-http;8.1.2.v20120308 ...
[info] Resolving org.eclipse.jetty#jetty-io;8.1.2.v20120308 ...
[warn]  [NOT FOUND  ] org.eclipse.jetty.orbit#javax.servlet;3.0.0.v201112011016!javax.servlet.orbit (603ms)
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.orbit
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::              FAILED DOWNLOADS            ::
[warn]  :: ^ see resolution messages for details  ^ ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.eclipse.jetty.orbit#javax.servlet;3.0.0.v201112011016!javax.servlet.orbit
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[error] {file:/C:/dev/tueet/}default-d5e982/*:update: sbt.ResolveException: download     failed: org.eclipse.jetty.orbit#javax.servlet;3.0.0.v201112011016!javax.servlet.orbit
[error] Total time: 1 s, completed 2012-03-27 14:33:34

这很傻,因为它在Maven中可以正常工作。我发现这是因为Orbit对打包做了一些操作(他们显然将其设置为Orbit)。

我尝试着使用exclude("org.eclipse.jetty.orbit", "javax.servlet"),但没有任何变化,它仍然需要该依赖项。

我找不到任何有关如何实际修复此问题的信息,也许有人会在这里帮助我 :)

更新:提出的错误提供了一种解决方法,所以要解决这个问题,我实际上更改了build.sbt为

name := "Tueet"

libraryDependencies += "org.eclipse.jetty" % "jetty-server" % "8.1.2.v20120308"

ivyXML := 
<dependency org="org.eclipse.jetty.orbit" name="javax.servlet" rev="3.0.0.v201112011016">
<artifact name="javax.servlet" type="orbit" ext="jar"/>
</dependency>

3
如果修复不起作用,您应该尝试清除Jetty的常青藤缓存。 - tonek
即使使用内联的ivyXML修复,我仍然无法让它正常工作。 - HRJ
1
谢谢@tonek!这个命令有效:rm -rf ~/.ivy2/cache/org.eclipse.jetty.orbit - nafg
3个回答

8

实际上发生的情况是,Ivy用户正在回滚到Jetty的旧版本:https://github.com/robfletcher/betamax/issues/63(这也是我们正在做的)。 - Nacho Coloma
已经有一段时间了,我会再次查看这个问题,看看我们是否可以找到更好的解决方案。Eclipse正在考虑将Orbit本身转换为更适合Maven的形式,这将是很好的,但目前还不清楚何时会发生以及何时可能会到达Maven中央仓库。就个人而言,我希望我们可以依赖于普通的构件,但遗憾的是这是Eclipse基金会知识产权政策所不允许的。 - jesse mcconnell
我必须纠正一下:升级到Gradle 1.4也会解决这个问题,并且Orbit依赖项可以直接使用。 - Nacho Coloma

6
我找到了一个解决方法。更多信息请参考这里:SBT、Jetty 和 Servlet 3.0
classpathTypes ~= (_ + "orbit")

libraryDependencies ++= Seq(
  "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container"         artifacts (Artifact("javax.servlet", "jar", "jar")
  )
)

libraryDependencies ++= Seq(
  "org.eclipse.jetty" % "jetty-webapp" % "8.1.4.v20120524" % "container" artifacts            (Artifact("jetty-webapp", "jar", "jar"))
)

你不需要覆盖Jetty Web应用程序的构件。 - Guillaume Massé

1
使用sbt 0.12+(来源:https://github.com/sbt/sbt/issues/499
libraryDependencies ++= Seq(
    "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container",
    "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container" artifacts Artifact("javax.servlet", "jar", "jar")
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接