Mismatch-slf4j-version mit Tomcat und WebApplicationInitializer
Ich habe die folgende Fehlermeldung, wenn ich versuche, für die Bereitstellung der Anwendung auf Tomcat.
04-Sep-2013 17:59:29.424 SEVERE [AsyncFileHandlerWriter-1626573634] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing
javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:165)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5370)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of org/springframework/instrument/classloading/tomcat/TomcatInstrumentableClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type LoggerFactory; used in the signature
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:299)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
at org.springframework.web.context.AbstractContextLoaderInitializer.<init>(AbstractContextLoaderInitializer.java:42)
at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.<init>(AbstractDispatcherServletInitializer.java:58)
at org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer.<init>(AbstractAnnotationConfigDispatcherServletInitializer.java:40)
at com.bravofly.wfcobrand.configuration.web.ServletConfiguration.<init>(ServletConfiguration.java:10)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:162)
... 13 more
Habe ich schon herausgefunden das problem ist in den Bibliotheken in das lib-Verzeichnis: slf4j-api-1.5.11.jar.
Setzen dort org.slf4j:slf4j-api:1.7.1
und org.slf4j:jcl-over-slf4j:1.7.1
mein problem gelöst.
Ich Frage mich, ob es möglich ist, etwas zu tun, was in meiner app um das problem zu lösen. Ich bin mit gradle also habe ich gesagt:
compile ... other dependencies
"org.slf4j:slf4j-api:1.7.1",
"org.slf4j:jcl-over-slf4j:1.7.1"
Aber das hat das problem nicht lösen. Gibt es eine Möglichkeit zu geben, eine Priorität, die die Bibliothek definiert auf meine build-Datei?
- PS: ich weiß, dass Tomcat vorrangig auf die Bibliotheken in meiner webapp, Sie zu laden, aber ich habe den gleichen Fehler, so dass ich vermute, es ist irgendeine Art von problem, wenn es um die andere version der gleichen Bibliothek
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl ich bin mir noch nicht sicher, warum, es war der servlet-container, der hatte in der shared lib-Verzeichnis eine ältere version für ein anderes Projekt. Wenn wir also entfernt es alles geklappt hat.
Sind wir mit Tomcat 7 und ich glaubte, dass die app libs Priorität hatte aber offenbar, wenn eine version bereits geladen war es verwerfen, die unsere.