Проблемы с регистрацией общих страниц при запуске webapp через xsbt-web-plugin - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь использовать jcl-over-slf4j для обработки журналов по нескольким зависимостям (регистрация через общие ресурсы осуществляется через Dispatch, Authorize.net и Rackspace CloudFiles - все, что использует httpclient ...).Все работает нормально при запуске вне sbt, но я получаю NoClassDefFoundError при работе через container:start.

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

Я исключил регистрацию общего доступа через ivyXML.

Некоторая информация о конфигурации:

object BuildSettings {
  import Resolvers._

  val buildOrganization = "myproject"
  val buildVersion      = "1.0"
  val buildScalaVersion = "2.9.0-1"

  val buildSettings: Seq[Project.Setting[_]] = {
    Defaults.defaultSettings ++
    webSettings ++
    (resolvers += maven2) ++
    (scanDirectories in Compile := Nil) ++
    (ivyXML := Dependencies.globalExclusions) ++
    (libraryDependencies ++= Dependencies.webapp) ++
    Seq(
      name         := "MyProject",
      organization := buildOrganization,
      version      := buildVersion,
      scalaVersion := buildScalaVersion
    )
  }
}

object Resolvers {
  val maven2 = "Java.net Maven2 Repo" at "http://download.java.net/maven/2/"
  val scalaToolsSnapshots = "Scala Tools Snapshot" at "http://scala-tools.org/repo-snapshots/"
  val scalaToolsReleases = "Scala Tools Releases" at "http://scala-tools.org/repo-releases"
}

object Dependencies {

  val liftVersion = "2.4-M5"
  val jettyVersion = "7.4.5.v20110725"

  val lift = Seq(
    "net.liftweb" %% "lift-webkit" % liftVersion % "compile->default" withSources(),
    "net.liftweb" %% "lift-mapper" % liftVersion % "compile->default" withSources(),
    "net.liftweb" %% "lift-widgets" % liftVersion % "compile->default" withSources()
  )

  val jetty = "org.eclipse.jetty" % "jetty-webapp" % jettyVersion % "container"
  val servlet = "javax.servlet" % "servlet-api" % "2.5" % "provided"

  val scalate = "org.fusesource.scalate" % "scalate-core" % "1.5.3" % "compile"

  val slf4j = "org.slf4j" % "slf4j-log4j12" % "1.6.4" % "compile"
  val jclSlf4j = "org.slf4j" % "jcl-over-slf4j" % "1.6.4" % "compile"

  val commonsValidator = "commons-validator" % "commons-validator" % "1.3.1" % "compile"

  val dispatch = "net.databinder" %% "dispatch-http" % "0.8.5" % "compile"
  val dispatchJson = "net.databinder" %% "dispatch-lift-json" % "0.8.5" % "compile"

  val quartz = "org.quartz-scheduler" % "quartz" % "2.1.2" % "compile" withSources()

  val junit = "junit" % "junit" % "4.5" % "test->default"
  val specs = "org.specs2" %% "specs2" % "1.7.1" % "test->default"

  val postgres = "postgresql" % "postgresql" % "8.4-702.jdbc4" % "runtime->default"

  val globalExclusions = <dependencies>
    <exclude org="commons-logging" module="commons-logging" />
  </dependencies>

  val webapp = Seq(
    jetty, servlet,
    scalate,
    slf4j, jclSlf4j,
    commonsValidator,
    dispatch, dispatchJson,
    quartz,
    junit, specs,
    postgres
  ) ++ lift

}

При работе вне sbt я использую:

-Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

и поместил jars commons-logging и log4j в / etc.Я также исключаю log4j jar через ivyXml перед упаковкой веб-приложения.http://articles.qos.ch/classloader.html

РЕДАКТ. 1 (дополнительная информация об ошибке):

Message:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:159)
org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:178)
dispatch.ConfiguredHttpClient.<init>(ConfiguredHttpClient.scala:11)
dispatch.thread.ThreadSafeHttpClient.<init>(thread.scala:34)
dispatch.thread.Safety$class.make_client(thread.scala:16)
dispatch.Http$.make_client(Http.scala:29)
dispatch.Http$.make_client(Http.scala:29)
dispatch.BlockingHttp$class.$init$(Http.scala:39)
dispatch.Http.<init>(Http.scala:21)
dispatch.Http$.<init>(Http.scala:29)
dispatch.Http$.<clinit>(Http.scala)
...
Caught and thrown by:
Message:
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:159)
org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:178)
dispatch.ConfiguredHttpClient.<init>(ConfiguredHttpClient.scala:11)
dispatch.thread.ThreadSafeHttpClient.<init>(thread.scala:34)
dispatch.thread.Safety$class.make_client(thread.scala:16)
dispatch.Http$.make_client(Http.scala:29)
dispatch.Http$.make_client(Http.scala:29)
dispatch.BlockingHttp$class.$init$(Http.scala:39)
dispatch.Http.<init>(Http.scala:21)
dispatch.Http$.<init>(Http.scala:29)
dispatch.Http$.<clinit>(Http.scala)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...