![](/img/trans.png)
[英]Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError
[英]Multiple bindings were found on the class path & Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path
我正在使用Gradle作為構建工具,在部署過程中,我遇到了下面提到的一些問題。
Gradle構建任務沒有問題,但是當我將其部署在tomcat8上時,它顯示以下錯誤。
build.gradle依賴項文件如下:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
compile group: 'org.json', name: 'json', version: '20090211'
// Apache Kafka Dependencies
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.0.0'
compile group: 'org.apache.kafka', name: 'connect-json', version: '2.0.0'
// Office365 authentication Dependencies
compile group: 'com.microsoft.azure', name: 'adal4j', version: '1.6.0'
runtime group: 'com.nimbusds', name: 'oauth2-oidc-sdk', version: '5.24.1'
// Apache Hadoop HDFS Dependencies
compile group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.9.1'
compile group: 'org.apache.hadoop', name: 'hadoop-hdfs-client', version: '2.9.1'
compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.9.1'
compile group: 'org.apache.hive', name: 'hive-jdbc', version: '2.3.3'
// Spring Dependencies
compile group: 'opensymphony', name: 'sitemesh', version: '2.4.2'
compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.14.RELEASE'
compile group: 'org.springframework', name: 'spring-tx', version: '4.3.14.RELEASE'
// Mysql Connector Dependency
compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
// Apache Spark Dependencies
compile group: 'com.databricks', name: 'spark-csv_2.11', version: '1.5.0'
compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.3.0'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.3.0'
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-scala_2.11', version: '2.8.8'
// Apache Storm & Apache Kafka Consumer Dependencies
compile group: 'org.apache.storm', name: 'storm-core', version: '1.2.0'
compile group: 'org.apache.storm', name: 'storm-kafka', version: '1.2.0'
compile group: 'org.apache.kafka', name: 'kafka_2.10', version: '0.9.0.1'
// Elasticsearch Dependencies
compile group: 'org.elasticsearch.client', name: 'elasticsearch-rest-high-level-client', version: '6.5.2'
compile group: 'org.elasticsearch', name: 'elasticsearch', version: '6.5.2'
//compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1'
//compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1'
//compile group: 'org.slf4j', name: 'slf4j-log4j12'
}
錯誤信息:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/sagarjoshi/opt/tomcat-analytics/apache-tomcat-8.0.53/webapps/analytics/WEB-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/sagarjoshi/opt/tomcat-analytics/apache-tomcat-8.0.53/webapps/analytics/WEB-INF/lib/log4j-slf4j-impl-2.8.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/sagarjoshi/opt/tomcat-analytics/apache-tomcat-8.0.53/webapps/analytics/WEB-INF/lib/logback-classic-1.0.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
17-Dec-2018 11:32:29.244 SEVERE [RMI TCP Connection(2)-127.0.0.1] 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:155)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5352)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:731)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1730)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:485)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:434)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
檢查您的項目依賴項。 真的需要這么多編譯依賴項嗎? 檢查所有API並使用匹配范圍。 可能runtime
通常就足夠了。
您的程序對日志API和橋接(log4和slf4j的logback)具有多個定義。 確定要使用哪一個,並相應地聲明依賴項。 提供使用的日志記錄API的配置。
請參閱slf4j-橋接如何工作。
如果您要標識具有不良瞬時依賴關系的項目,請使用gradle依賴關系樹(請參閱gradle-檢查依賴關系 )
gradlew dependencies
可能在分析了依賴關系之后,您可能需要根據運行時環境排除一些依賴關系。 請參閱gradle-管理瞬態依賴項如何執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.