简体   繁体   English

找不到Spring Application上下文

[英]Spring Application context not found

I'm having an issue with reading the application context of my application. 我在阅读应用程序的应用程序上下文时遇到问题。 I'm doing experiments with Vaadin . 我正在和Vaadin做实验。 My configuration class, which is annotated in a way I've used before in other projects and always works is annotated with: 我的配置类以我之前在其他项目中使用过的方式进行注释,并且始终可以使用以下方式进行注释:

@ImportResource("classpath:applicationContext.xml")

What makes this so odd is that no matter what I do, even using it to explicitly find the file, for example: 这么奇怪的是,无论我做什么,甚至用它来明确地找到文件,例如:

@ImportResource("/tmp/classpath:applicationContext.xml")

It still does not work! 它仍然无法正常工作! I'm using Spring 3 at the moment (for historical reasons...) 我现在正在使用Spring 3(由于历史原因......)

2016/05/17 13:39 ContextLoader.initWebApplicationContext:319 - Context initialization failed java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:52) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:70) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processCon 2016/05/17 13:39 ContextLoader.initWebApplicationContext:319 - org.springframework.asm.ClassReader。(未知来源)org.springframework.asm.ClassReader。(未知来源)org上的上下文初始化失败java.lang.IllegalArgumentException。 .springframework.asm.ClassReader。(未知来源)org.springframework.core.type.classreading.SimpleMetadataReader。(SimpleMetadataReader.java:52)org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java: 80)org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)at org.springframework.context org.springframework.context.annotation.ConfigurationClassPostProcessor.processCon中的.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:70) figBeanDefinitions(ConfigurationClassPostProcessor.java:253) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424) at org.eclipse.je org.springframework上的org.springframework.context.ArinitionRegistry(ConfigurationClassPostProcessor,我发布在org.spring框架中的org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)的org.springframework.context.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223)中的figBeanDefinitions(ConfigurationClassPostProcessor.java:253)位于org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java)的org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)中的.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) :294)在org.eclipse.jetty的org.eclipse.jetty.wec.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782)。 org.eclipse.je上的servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424) tty.server.handler.ContextHandler.startContext(ContextHandler.java:774) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.util.component.AbstractLifeCycl 位于org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext。)的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)中的tty.server.handler.ContextHandler.startContext(ContextHandler.java:774)。 java:1242)atg.eclipse.jetty.server.hand.ContextHandler.doStart(ContextHandler.java:717)atg.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)atg.mortbay.jetty .plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298)位于org.eclipse.jetty.start(AbstractLifeCycle.java:64)org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection)的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) .java:229)org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172)org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)at org。 org.eclipse.jetty.util.component.AbstractLifeCycl中的eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) e.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:282) at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:520) at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365) at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Li e.start(AbstractLifeCycle.java:64)位于org.eclipse.jetty.server.doStart(Server.java:282)的org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)org.mortbay.jet.plugin.AbstractJettyMojo的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) .startJetty(AbstractJettyMojo.java:520)org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365)org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523)at org。位于org.apache.maven.maven.life.internal.MojoExecutor的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)中的apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)。执行(MojoExecutor.java:153)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Li fecycleModuleBuilder.java:116) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) at org.apache.maven.cli.MavenCli.main(MavenCli.java:199) 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.jav fecycleModuleBuilder.java:116)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java: 51)在org.apache.maache.maven.maven.DefaultMaven.doExecute的org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) (DefaultMaven.java:193)org.apache.maven.maven.DefaultMaven.execute(DefaultMaven.java:106)位于org.apache.maven的org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)。 cli.MavenCli.doMain(MavenCli.java:288)atg.apache.maven.cli.MavenCli.main(MavenCli.java:199)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl。在java.lang.reflect.Method.invoke(Method.jav)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)调用(NativeMethodAccessorImpl.java:62) a:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) a:498)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)at org.codehaus .plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

After a lot of research we finally found what was going on. 经过大量的研究,我们终于找到了正在发生的事情。 Very tricky this one but it makes sense: 这个非常棘手,但它有道理:

Java 1.8 ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet Java 1.8 ASM ClassReader无法解析类文件 - 可能是由于尚未支持的新Java类文件版本

Essentially the new ASM is not reading classes the same way as it used to, and Spring 3 is reading them with the old ASM compatibility. 本质上,新的ASM不像以前那样读取类,而Spring 3正在使用旧的ASM兼容性读取它们。 This results in that I can run the application in Java 8 only if I change to Spring 4. Spring does guarantee compatibility between Spring 4 and any old java version since Java 6: 这导致我只有在更改为Spring 4时才能在Java 8中运行应用程序.Spring确保Spring 4与Java 6之后的任何旧Java版本之间的兼容性:

https://spring.io/blog/2015/04/03/how-spring-achieves-compatibility-with-java-6-7-and-8 https://spring.io/blog/2015/04/03/how-spring-achieves-compatibility-with-java-6-7-and-8

The oposite is not true which means that I cannot run Spring 3 with Java 8, and so we now have a good migration work to do :). oposite不正确,这意味着我无法使用Java 8运行Spring 3,因此我们现在有一个很好的迁移工作:)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM