Я пытаюсь использовать 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)