0

我在 web 应用程序中使用基于 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。所以我无法理解它与我的本地磁盘内容有什么关系。

谢谢

4

1 回答 1

1

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

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

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

于 2012-07-19T05:57:28.450 回答