SBT, Jetty и Servlet 3.0 - программирование
Подтвердить что ты не робот

SBT, Jetty и Servlet 3.0

У меня есть очень маленькая проблема.

У меня есть следующий файл build.sbt:

name := "Tueet"

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

После вызова обновления sbt я получаю следующее:

[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 нет проблем. Я узнал, что это потому, что Орбита что-то делает с упаковкой (они, по-видимому, устанавливают ее на орбиту).

Я попытался сделать 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>
4b9b3361

Ответ 1

Смотрите эту ошибку: https://jira.codehaus.org/browse/JETTY-1493

Суть проблемы в том, что плющ не поддерживает расширение орбиты и должен отображать тип упаковки орбиты в банку. Не уверен, что вы используете плющ или нет, но основная причина одна и та же, вы можете видеть, что, глядя на URL-адрес, он загружается из центрального центра.

Эта ошибка имеет немного больше фона по причине того, что мы сначала переключились на эти зависимости.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=371954

Ответ 2

Я нашел обходное решение. Дополнительную информацию можно найти здесь: 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"))
)

Ответ 3

с sbt 0.12+ (from: 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")
)