2012-07-18 177 views
0

我在web应用程序中使用基于spring java的配置。我有一个问题。未能加载bean类;嵌套的异常是java.io.FileNotFoundException:类路径资源无法打开,因为它不存在

在我的配置文件中,我正在导入并获取一些其他的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; 
} 
} 

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

UPDATE

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

谢谢

回答

1

显然,您在类路径中缺少MyConfig.class。

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

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

+0

嘿Arne,我注意到,当我关闭在Eclipse中的MyName项目它不工作,当我打开它的项目工作。但MyModel项目不应该依赖本地磁盘上的myname项目。我为Myname项目创建了一个jar并将其推送到本地存储库中 – javaMan 2012-07-19 13:26:24

+0

@ravi我很确定它没有部署。可以肯定的是,请检查部署目录。 – Arne 2012-07-19 14:29:34

+0

你可以更多的elobarate。我不明白你的意思是部署目录。 – javaMan 2012-07-19 14:30:57

相关问题