无法加载bean类;嵌套异常是java.io.FileNotFoundException:无法打开类路径资源,因为它不存在

时间:2012-07-18 21:23:51

标签: java eclipse spring maven spring-mvc

我在网络应用中使用基于Spring java的配置。我有一个问题。

在我的配置文件中,我正在导入并获取其他一些java配置文件。

当我运行我的测试用例时,所有测试用例都在通过。在我的测试用例中,我使用Aplication来获取bean。我没有任何问题。但是,当我告诉它在服务器上运行时,它说其中一个配置不存在。因此导入无效。但是当我按ctrl +点击代码时,我可以进入该配置代码。

我正在使用TomCat版本7.0和使用maven我得到所有其他依赖项。

堆栈跟踪如下:

INFO: Initializing Spring root WebApplication
Jul 18, 2012 4:56:28 PM org.apache.catalina.core.Standard Start
SEVERE:      to   of      
org.springframework.web..Loader
org.springframework.beans.factory.BeanDefinitionStore: Failed to load bean :     
com.Hello.World.HelloWorldConfig; nested  is     
java.io.FileNotFound:  path resource [com/hello/configs/MyConfig.] cannot be opened because it does not exist
at org.springframework..annotation.ConfigurationPostProcessor.processConfigBeanDefinitions(ConfigurationPostProcessor.java:267)
at org.springframework..annotation.ConfigurationPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationPostProcessor.java:203)
at org.springframework..support.AbstractApplication.invokeBeanFactoryPostProcessors(AbstractApplication.java:622)
at org.springframework..support.AbstractApplication.refresh(AbstractApplication.java:451)
at org.springframework.web..Loader.configureAndRefreshWebApplication(Loader.java:385)
at org.springframework.web..Loader.initWebApplication(Loader.java:284)
at org.springframework.web..Loader.(Loader.java:111)
at org.apache.catalina.core.Standard.Start(Standard.java:4779)
at org.apache.catalina.core.Standard.startInternal(Standard.java:5273)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Caused by: java.io.FileNotFound:  path resource [com/hello/configs/MyConfig.] cannot be opened because it does not exist
at org.springframework.core.io.PathResource.getInputStream(PathResource.java:157)
at org.springframework.core.type.reading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:49)
at org.springframework.core.type.reading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
at org.springframework.core.type.reading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101)
at org.springframework.core.type.reading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)
at org.springframework..annotation.ConfigurationParser.processImport(ConfigurationParser.java:317)
at org.springframework..annotation.ConfigurationParser.doProcessConfiguration(ConfigurationParser.java:228)
at org.springframework..annotation.ConfigurationParser.processConfiguration(ConfigurationParser.java:149)
at org.springframework..annotation.ConfigurationParser.parse(ConfigurationParser.java:126)
at org.springframework..annotation.ConfigurationPostProcessor.processConfigBeanDefinitions(ConfigurationPostProcessor.java:263)
... 16 more
Jul 18, 2012 4:56:28 PM org.apache.catalina.core.Standard startInternal
SEVERE: Error Start
Jul 18, 2012 4:56:28 PM org.apache.catalina.core.Standard startInternal
SEVERE:  [/helloWorld] startup failed due to previous errors
Jul 18, 2012 4:56:28 PM org.apache.catalina.core.Application log
INFO: Closing Spring root WebApplication

配置如下

@Configuration
@Import({MyConfig.})
public  HelloWorldConfig {

@Autowired
public MyName myName;

@Bean
public MyModel myModel() {
    MyModel bean = new MyModel();
    bean.setMyName(myName);     
    return bean;
}
}

我无法弄清楚我错过了什么。

更新

我注意到当我在eclipse中关闭MyName项目时它无法正常工作,当我打开它时,项目正在运行。但MyModel项目不应该依赖于本地磁盘上的myname项目。我为Myname项目创建了一个jar并将其推送到中央存储库。因此它应该从repo获得jar。所以我无法理解它与我的本地磁盘内容有什么关系。

由于

1 个答案:

答案 0 :(得分:1)

显然,你在类路径上缺少MyConfig.class。

但你确定要导入MyConfig吗?您使用的是MyModel。其次,为什么要为@Import使用数组参数?

无论哪种方式,它看起来像部署问题,可能与导入注释无关。因此,检查项目设置,看看是否真正导出了所需的类。