我在阅读应用程序的应用程序上下文时遇到问题。我正在与Vaadin做实验。我的配置类以我以前在其他项目中使用过的方式进行了注释,并且始终有效,并带有以下注释:
@ImportResource("classpath:applicationContext.xml")
令我如此奇怪的是,无论我做什么,甚至使用它来显式查找文件,例如:
@ImportResource("/tmp/classpath:applicationContext.xml")
它仍然不起作用!我目前正在使用Spring 3(出于历史原因...)
2016/05/17 13:39 ContextLoader.initWebApplicationContext:319-上下文初始化在org.springframework.asm.ClassReader。(未知源)在org.springframework.asm.ClassReader。(未知源)在java.lang.IllegalArgumentException。 org.springframework.core.type.classreading.SimpleMetadataReader。(SimpleMetadataReader.java:52)上的.springframework.asm.ClassReader。(未知源),org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory .: 80)在orgspring.org.org上的org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)在org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102) .annotation.ConfigurationClassUtils。org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:253)的org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223)的checkConfigurationClassCandidate(ConfigurationClassUtils.java:70)在orgspring。 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)上的.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java :389),位于org.springframework.web.context处。org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)在org.eclipse.jetty.servlet.ServletContextServlet.startContext(ServletContextHandler.java:249)在org.eclipse.jetty.webapp.WebAppContext处在org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774) org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)上的.startContext(WebAppContext.java:1242)org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)上的。 org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298),位于org.eclipse.jetty.util.component.AbstractLifeCycle。在org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)处开始(AbstractLifeCycle.java:64)在org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172)处在org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)在org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)在org.eclipse.jetty.util org.eclipse.jetty.server.Server.doStart(Server.java)上的.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)在org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) :282),位于org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65),位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64),位于org.mortbay.jetty。 plugin.AbstractJettyMojo。在org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365)在org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523)处的org.mortbay.jetty.plugin。 .maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)位于org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)在org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder上的org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)。在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)处建立(SingleThreadedBuilder.java:51) .maven.DefaultMaven.doExecute(DefaultMaven.java:193)位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)位于org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)(位于org.apache.maven.cli.MavenCli.main(MavenCli.java:199),位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于org.codehaus的java.lang.reflect.Method.invoke(Method.java:498)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) .plexus.classworlds.launcher.Launcher。在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)处的launchEnhanced(Launcher.java:289)在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)处的launcher.launch(Launcher.java:229)在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
经过大量研究,我们终于找到了正在发生的事情。这很棘手,但是很有意义:
Java 1.8 ASM ClassReader无法解析类文件-可能是由于尚不支持新的Java类文件版本
本质上,新的ASM读取类的方式与以前不同,并且Spring 3以旧的ASM兼容性读取它们。这导致仅当我更改为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
相反,这意味着我无法在Java 8上运行Spring 3,因此我们现在有一个很好的迁移工作:)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句