Jeppe Nejsum Madsen wrote:
After having upgraded from 0.5.2 to trunk, I can no longer run the
jettyRun or jettyRunWar tasks due to the error below
Note that the same project runs fine with mvn jetty:run, mvn
jetty:run-war and the war generated by gradle works fine when deployed
to the real jetty instance. This leads me to think it has something to
do with the jettyRun task. Any clues?
The problem is basically due to two different versions of log4j being
visible to your webapp: one bundled in your war, and the other visible
from the system classloader.
We have a couple of options for fixing this:
1. Update the version of log4j loaded by the system classloader (that
is, the version in $gradleHome/lib). Currently, we're using
log4j-over-slf4j. To fix the problem, we'd have to replace this with
log4j and configure in a bridging adapter to route the messages to slf4j
or logback.
2. Configure jetty so that the log4j loaded by the system classloader is
not visible to the webapp. Jetty by default treats log4j as a system
library, which means that any version in the war is ignored. It is easy
enough to configure Jetty to treat log4j as a non-system library, so
that the version in the war is used instead.
One implication of the current setup is that any logging the web app
does using commons-logging, slf4j or log4j is automatically routed to
Gradle's logging system. This can be really useful, as logging just
works from the web app without having to do any configuration. The
downside is that it conflicts with any logging configuration done by the
web app (as in your case). If we choose option 1, this will continue to
be the case. If we choose option 2, the conflicts will stop happening,
but so will the automatic bridging.
For now, I think option 2 is the safer option. We can re-add the
bridging to Gradle logging later, in a way that will not lead to version
conflicts.
/Jeppe
Java.lang.IllegalAccessError: tried to access method
org.apache.log4j.Logger.<init>(Ljava/lang/String;)V from class
org.apache.log4j.spi.RootLogger
at org.apache.log4j.spi.RootLogger.<init>(RootLogger.java:43)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:78)
at net.liftweb.util.LogBoot$.log4jIsConfigured$1(Log.scala:113)
at net.liftweb.util.LogBoot$._log4JSetup(Log.scala:129)
at net.liftweb.util.LogBoot$$anonfun$2.apply(Log.scala:95)
at net.liftweb.util.LogBoot$$anonfun$2.apply(Log.scala:95)
at net.liftweb.util.LogBoot$.checkConfig(Log.scala:93)
at
net.liftweb.util.LogBoot$.net$liftweb$util$LogBoot$$_logger(Log.scala:139)
at net.liftweb.util.LogBoot$$anonfun$3.apply(Log.scala:141)
at net.liftweb.util.LogBoot$$anonfun$3.apply(Log.scala:141)
at net.liftweb.http.LiftRules$.<init>(LiftRules.scala:654)
at net.liftweb.http.LiftRules$.<clinit>(LiftRules.scala)
at
net.liftweb.http.provider.servlet.ServletFilterProvider$class.init(ServletFilterProvider.scala:17)
at net.liftweb.http.LiftFilter.init(LiftServlet.scala:481)
at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:620)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1234)
at
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at
org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)
at
org.gradle.api.plugins.jetty.JettyPluginWebAppContext.doStart(JettyPluginWebAppContext.java:124)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at
org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.gradle.api.plugins.jetty.JettyPluginServer.start(JettyPluginServer.java:112)
at
org.gradle.api.plugins.jetty.AbstractJettyRunTask.startJettyInternal(AbstractJettyRunTask.java:277)
at
org.gradle.api.plugins.jetty.AbstractJettyRunTask.startJetty(AbstractJettyRunTask.java:232)
at
org.gradle.api.plugins.jetty.AbstractJettyRunTask.start(AbstractJettyRunTask.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:234)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1062)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:893)
at
org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:744)
at
org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:727)
at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:163)
at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethod0(ScriptBytecodeAdapter.java:188)
at
org.gradle.api.internal.project.AnnotationProcessingTaskFactory$_createTask_closure1_closure2.doCall(AnnotationProcessingTaskFactory.groovy:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:234)
at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:893)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.gradle.api.ClosureTaskAction.execute(DefaultTask.groovy:91)
at org.gradle.api.ClosureTaskAction.execute(DefaultTask.groovy)
at org.gradle.api.internal.AbstractTask.doExecute(AbstractTask.java:257)
at org.gradle.api.internal.AbstractTask.execute(AbstractTask.java:209)
at
org.gradle.execution.DefaultTaskExecuter.executeTask(DefaultTaskExecuter.java:153)
at
org.gradle.execution.DefaultTaskExecuter.doExecute(DefaultTaskExecuter.java:144)
at
org.gradle.execution.DefaultTaskExecuter.execute(DefaultTaskExecuter.java:67)
at
org.gradle.execution.TaskNameResolvingBuildExecuter.execute(TaskNameResolvingBuildExecuter.java:88)
at org.gradle.Gradle.loadAndConfigureAndRun(Gradle.java:167)
at org.gradle.Gradle.access$000(Gradle.java:56)
at org.gradle.Gradle$1.run(Gradle.java:89)
at org.gradle.Gradle.doBuild(Gradle.java:145)
at org.gradle.Gradle.run(Gradle.java:87)
at org.gradle.Main.execute(Main.java:83)
at org.gradle.Main.main(Main.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.gradle.BootstrapMain.main(BootstrapMain.java:53)
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email