java - 加载bean类失败;嵌套异常是 java.io.FileNotFoundException : class path resource cannot be opened because it does not exist

标签 java eclipse spring maven spring-mvc

我在 Web 应用程序中使用基于 Spring Java 的配置。我有一个问题。

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

当我运行测试用例时,所有测试用例都通过了。在我的测试用例中,我使用应用程序来获取 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。所以我无法理解它与我的本地磁盘内容有什么关系。

谢谢

最佳答案

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

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

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

关于java - 加载bean类失败;嵌套异常是 java.io.FileNotFoundException : class path resource cannot be opened because it does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550580/

相关文章:

java - 为 Java 数组获取和赋值?

java - 禁用 JPA EclipseLink 2.4 缓存

java - 在多个索引上对 Int[] 的 ArrayList 进行排序

java - 我应该为 Eclipse 中的每个 Java 项目创建工作区吗

eclipse - Egit:将 rebase 配置为 master 分支的默认 pull 策略

java - eclipse 项目属性

java - Spring Data JPA - 命名查询忽略空参数

java - MotionEvent.ACTION_UP 未被调用

spring - 如何为 Spring REST MVC 应用程序定义包结构?

java - @Transactional 是做什么的?