Grails 2.3.5 War在Tomcat 7.0.47中无法正常工作

Grails 2.3.5 War在Tomcat 7.0.47中无法正常工作,grails,grails-2.3,Grails,Grails 2.3,在开发中运行应用程序时,它工作正常。 当我构建war并尝试在tomcat中部署时,会出现以下错误: log4j:ERROR Error initializing log4j: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory java.lang.IllegalAccessError: tried to access field org.slf4j

在开发中运行应用程序时,它工作正常。 当我构建war并尝试在tomcat中部署时,会出现以下错误:

log4j:ERROR Error initializing log4j: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
    at org.slf4j.LoggerFactory.staticInitialize(LoggerFactory.java:83)
    at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:73)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.<clinit>(DefaultGrailsApplication.java:82)
    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:379)
    at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.createGrailsApplication(Log4jConfigListener.java:54)
    at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:42)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5017)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5531)
    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:652)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    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:745)
log4j:初始化log4j时出错:试图从类org.slf4j.LoggerFactory访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON
java.lang.IllegalAccessError:试图从org.slf4j.LoggerFactory类访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON
位于org.slf4j.LoggerFactory.staticInitialize(LoggerFactory.java:83)
登录org.slf4j.LoggerFactory(LoggerFactory.java:73)
位于org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
位于org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131)
位于org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
位于org.codehaus.groovy.grails.commons.DefaultGrailsApplication。(DefaultGrailsApplication.java:82)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于java.lang.Class.newInstance(Class.java:379)
位于org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.createGrailsApplication(Log4jConfigListener.java:54)
位于org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:42)
位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5017)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5531)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
根据SLF4j

此错误是由LoggerFactory的静态初始值设定项引起的 类尝试直接访问的SINGLETON字段 org.slf4j.impl.StaticLoggerBinder。而这在SLF4J中是允许的 1.5.5及更早版本,在1.5.6及更高版本中,SINGLETON字段已标记为私有访问

如果您得到上面显示的异常,那么您使用的是较旧的 slf4j api的版本,例如1.4.3,带有新版本的slf4j 绑定,例如1.5.6。通常,当您的Maven pom.ml 文件合并了hibernate 3.3.0,它声明了对 slf4j api版本1.4.2。如果您的pom.xml声明了对 slf4j绑定,比如说slf4j-log4j12版本1.5.6,那么您将得到 非法访问错误。在pom.xml文件中,显式声明 对与声明绑定版本匹配的slf4j api的依赖关系 这将使问题消失

请看这一点。 您可能需要验证服务器不包含slf4j api的旧版本