【问题标题】:java.lang.IllegalAccessError while starting Spring application on Tomcat 8在 Tomcat 8 上启动 Spring 应用程序时出现 java.lang.IllegalAccessError
【发布时间】:2015-09-15 16:29:02
【问题描述】:

当我尝试在 Tomcat 8 上运行项目时遇到这个非常奇怪的错误:

INFO o.s.web.context.ContextLoader - Root WebApplicationContext:初始化开始 . INFO o.s.w.c.s.AnnotationConfigWebApplicationContext - 刷新根 WebApplicationContext:启动日期 [Mon Jun 29 10:59:34 CEST 2015];上下文层次的根 . INFO o.s.w.c.s.AnnotationConfigWebApplicationContext - 注册带注释的类:[class com...]

错误 o.s.web.context.ContextLoader - 上下文初始化失败 java.lang.IllegalAccessError:试图访问方法 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingletonMutex()Ljava/lang/Object;来自类 org.springframework.context.event.AbstractApplicationEventMulticaster

完整的堆栈跟踪如下:

信息:在 java.library.path:C:\Program Files\Java\jdk1.8.0_45\bin;C:\WINDOWS\ 中找不到允许在生产环境中获得最佳性能的基于 APR 的 Apache Tomcat Native 库Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem; C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\glassfish4\jdk7\jre\bin; C:\Program Files\TortoiseSVN\bin;D:\apache-maven-3.2.3\bin;C:\Program Files (x86)\QuickTime\QTSystem\;. 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.coyote.AbstractProtocol 初始化 信息:初始化 ProtocolHandler ["http-nio-8088"] 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息:使用共享选择器进行 servlet 写入/读取 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.coyote.AbstractProtocol 初始化 信息:初始化 ProtocolHandler ["ajp-nio-8099"] 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息:使用共享选择器进行 servlet 写入/读取 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.catalina.startup.Catalina 加载 INFO:初始化处理时间为 823 毫秒 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.catalina.core.StandardService startInternal 信息:启动服务 Catalina 唇 2015 年 11 月 29 日上午 11:40:01 org.apache.catalina.core.StandardEngine startInternal 信息:启动 Servlet 引擎:Apache Tomcat/8.0.23 唇 2015 年 11 月 29 日上午 11:40:04 org.apache.jasper.servlet.TldScanner scanJars 信息:至少有一个 JAR 已扫描 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。 2015 年 2 月 29 日上午 11:40:04 org.apache.catalina.core.ApplicationContext 日志 信息:在类路径上检测到 Spring WebApplicationInitializers:[com.siemens.ott.RestServiceWebAppIntializer@5fb6fe5e] 2015 年 2 月 29 日上午 11:40:04 org.apache.catalina.core.ApplicationContext 日志 信息:初始化 Spring 根 WebApplicationContext .11:40:04.745 INFO o.s.web.context.ContextLoader - Root WebApplicationContext:初始化开始 .11:40:04.760 INFO o.s.w.c.s.AnnotationConfigWebApplicationContext - 刷新根 WebApplicationContext:启动日期 [Mon Jun 29 11:40:04 CEST 2015];上下文层次的根 .11:40:04.848 INFO o.s.w.c.s.AnnotationConfigWebApplicationContext - 注册带注释的类:[class com.ott.BusinessBeans] .11:40:05.192 错误 o.s.web.context.ContextLoader - 上下文初始化失败 java.lang.IllegalAccessError:试图访问方法 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingletonMutex()Ljava/lang/Object;来自类 org.springframework.context.event.AbstractApplicationEventMulticaster 在 org.springframework.context.event.AbstractApplicationEventMulticaster.setBeanFactory(AbstractApplicationEventMulticaster.java:84) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 在 org.springframework.context.event.SimpleApplicationEventMulticaster.(SimpleApplicationEventMulticaster.java:60) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.initApplicationEventMulticaster(AbstractApplicationContext.java:667) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:471) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) ~[spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE] 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) ~[spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE] 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) [spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE] 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727) [catalina.jar:8.0.23] 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167) [catalina.jar:8.0.23] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.0.23] 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [catalina.jar:8.0.23] 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) [catalina.jar:8.0.23] 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_45] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45] 在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_45] 唇 2015 年 11 月 29 日上午 11:40:05 org.apache.catalina.core.StandardContext listenerStart 严重:向 org.springframework.web.context.ContextLoaderListener 类的侦听器实例发送上下文初始化事件的异常 java.lang.IllegalAccessError:试图访问方法 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingletonMutex()Ljava/lang/Object;来自类 org.springframework.context.event.AbstractApplicationEventMulticaster 在 org.springframework.context.event.AbstractApplicationEventMulticaster.setBeanFactory(AbstractApplicationEventMulticaster.java:84) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.(SimpleApplicationEventMulticaster.java:60) 在 org.springframework.context.support.AbstractApplicationContext.initApplicationEventMulticaster(AbstractApplicationContext.java:667) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:471) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

我的第一个想法是 Spring 版本中存在一些错误,但我找不到任何东西。这与我使用过几次的项目设置几乎相同,唯一的区别是这是 java 8 项目。

项目是动态 Web 模块 3.1。

下面是 .pom 文件的依赖项,我没有看到版本中有任何冲突。

如果有人遇到过这种情况,请提供帮助。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-test</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>wsdl4j</groupId>
        <artifactId>wsdl4j</artifactId>
        <version>1.6.3</version>
    </dependency>

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.1.Final</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5</version>
    </dependency>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.3</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>javax.xml</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.1</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.12</version>
    </dependency>
</dependencies>

mvn 依赖树:

C:\Users\Z003DP9F\java-8 工作区\workspace\vmgw>mvn 依赖:树 [INFO] 正在扫描项目... [信息] [信息] --------------------------------------------- ------------------------- [信息] 构建 vmgw 1.0 [信息] --------------------------------------------- ------------------------- [警告] 工件 javax.xml:jaxb-api:jar:2.1 已重新定位到 javax.xml.bind:jaxb-api:jar:2.1 [信息] [信息] --- maven-dependency-plugin:2.8:tree (default-cli) @ vmgw --- [警告] 工件 javax.xml:jaxb-api:jar:2.1 已重新定位到 javax.xml.bind:jaxb-api:jar:2.1 [信息] com.siemens.ott:vmgw:war:1.0 [信息] +- org.springframework:spring-core:jar:4.1.6.RELEASE:compile [信息] | - commons-logging:commons-logging:jar:1.2:compile [信息] +- org.springframework.ws:spring-ws-test:jar:2.2.1.RELEASE:compile [信息] | +- org.springframework.ws:spring-xml:jar:2.2.1.RELEASE:compile [信息] | - xmlunit:xmlunit:jar:1.5:编译 [信息] +- org.springframework:spring-context:jar:4.1.6.RELEASE:compile [信息] | +- org.springframework:spring-aop:jar:4.1.6.RELEASE:compile [信息] | | - aopalliance:aopalliance:jar:1.0:compile [信息] | +- org.springframework:spring-beans:jar:4.1.6.RELEASE:compile [信息] | - org.springframework:spring-expression:jar:4.1.6.RELEASE:compile [信息] +- org.springframework:spring-webmvc:jar:4.1.6.RELEASE:compile [信息] | - org.springframework:spring-web:jar:4.1.6.RELEASE:compile [信息] +- ch.qos.logback:logback-classic:jar:1.1.3:compile [信息] | +- ch.qos.logback:logback-core:jar:1.1.3:compile [信息] | - org.slf4j:slf4j-api:jar:1.7.7:compile [信息] +- wsdl4j:wsdl4j:jar:1.6.3:compile [信息] +- javax.servlet:javax.servlet-api:jar:3.0.1:provided [信息] +- javax.annotation:javax.annotation-api:jar:1.2:compile [信息] +- javax.xml.bind:jaxb-api:jar:2.1:compile [信息] | +- javax.xml.stream:stax-api:jar:1.0-2:compile [信息] | - javax.activation:activation:jar:1.1:compile [信息] +- org.springframework.ws:spring-ws-core:jar:2.2.1.RELEASE:compile [信息] | - org.springframework:spring-oxm:jar:4.0.9.RELEASE:compile [信息] +- junit:junit:jar:4.12:test [信息] | - org.hamcrest:hamcrest-core:jar:1.3:test [信息] +- org.springframework:spring-test:jar:4.1.6.RELEASE:compile [信息] +- commons-io:commons-io:jar:2.4:compile [信息] +- org.apache.httpcomponents:httpclient:jar:4.5:compile [信息] | +- org.apache.httpcomponents:httpcore:jar:4.4.1:compile [信息] | - commons-codec:commons-codec:jar:1.9:compile [信息] +- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile [信息] +- javax.validation:validation-api:jar:1.1.0.Final:compile [信息] - org.hibernate:hibernate-validator:jar:5.1.1.Final:compile [信息] +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile [信息] - com.fasterxml:classmate:jar:1.0.0:compile [信息] --------------------------------------------- ------------------------- [信息] 构建成功

【问题讨论】:

  • 请发布完整的堆栈跟踪而不是 sn-p 并添加 mvn dependency:tree 的输出。
  • 我正在下载 mvn dependency:tree 的插件,稍后会发布。请让我知道我是否可以添加一些其他信息以清楚起见。
  • 放输出就好了。至少我注意到您想将 &lt;scope&gt;test&lt;/scope&gt; 指定给 spring-ws-testspring-test 依赖项的一件事,您不希望应用程序中的那些仅用于测试。
  • 从堆栈跟踪来看,您正在混合版本(4.1.6 和 4.0.9)。我强烈建议使用 spring 框架 bom 或(更好的)spring io 平台。让您无需弄清楚哪些版本的框架可以协同工作。
  • @M.Deinum 你有什么建议可以变成答案吗?我该如何以最简单的方式解决这些冲突?

标签: java spring maven spring-mvc tomcat


【解决方案1】:

问题是您混合了不兼容的不同版本的 Spring。无论如何,您都不应该混合来自任何框架(Spring、Hibernate、JSF 等)的不同版本的 jar,因为这必然会发生。

最好的方法是简单地使用Spring IO Platform

将以下内容添加到您的 pom 中

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.1.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后删除您的 pom 中的版本,因为这些版本现在由 platform-bom 管理,您现在应该有可以一起工作的版本并且不再有冲突的版本。有关托管版本的列表,请查看此appendix

【讨论】:

  • 非常感谢。它是否会在新版本发布时获取新版本,如果是,我可以阻止这个插件这样做吗?
  • 不,因为您使用的是特定的 bom 版本,要更新版本,您必须自己明确声明它们或更新 bom(如果有新版本)。您也可以将它用作父 pom 而不是 dependencyManagement one。这样做的好处是您可以使用&lt;properties&gt; 来指定版本。例如,如果您想要另一个 Spring 版本添加 &lt;spring.version&gt;3.2.13.RELEASE&lt;/spring.version&gt; 会给您该版本,但前提是您将其用作父版本。
猜你喜欢
  • 2020-05-14
  • 2021-07-16
  • 2020-12-30
  • 1970-01-01
  • 2016-04-22
  • 2017-07-17
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
相关资源
最近更新 更多