通过xsbt-web-plugin运行webapp时的公共日志记录问题

时间:2012-01-10 01:23:10

标签: java scala sbt

我正在尝试使用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

并在/ etc中放置了commons-logging和log4j jar。 在我打包webapp之前,我还通过我的ivyXml排除了log4j jar。 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)

0 个答案:

没有答案