【发布时间】:2014-09-17 20:59:52
【问题描述】:
我有两个(网络)项目,第二个项目使用第一个扩展类。我什至不知道我的项目的设计是否正确,但事实是我在服务器启动期间遇到了错误,我不知道是否存在设计错误:
- 项目鸟
package com.mycompany.dao;
public interface BirdDao{
public void saveFly(Fly fly);
}
package com.mycompany.dao.impl;
public class BirdDaoImpl implements BirdDao{
public BirdDaoImpl(){
}
public void saveFly(Fly fly){
System.out.println("I'm saving flight data...");
}
}
- 猎鹰计划
package com.mycompany.myunit.dao;
public interface FalconDao {
public void saveHunt(Hunt hunt);
}
package com.mycompany.myunit.dao.impl;
import com.mycompany.dao.impl.BirdDaoImpl;
public class FalconDaoImpl extends BirdDaoImpl implements FalconDao{
public FalconDaoImpl(){
}
public void saveHunt(Hunt hunt){
System.out.println("I'm saving hunt data... poor prey!");
}
}
当我尝试在服务器上运行此架构时,Spring 引发异常:
平台:Eclipse Luna 4.4 Spring工具套件3.6.1
Severe: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: com.mycompany.myunit.dao.impl.FalconDaoImpl; nested exception is java.io.FileNotFoundException: class path resource [com/mycompany/dao/impl/BirdDaoImpl.class] cannot be opened because it does not exist
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:162)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:305)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.io.FileNotFoundException: class path resource [com/mycompany/dao/impl/BirdDaoImpl.class] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:50)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:82)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:77)
at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:564)
at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getSuperClass(ConfigurationClassParser.java:740)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:287)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:218)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:176)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:158)
... 39 more
是否存在设计错误或 Eclipse 上的配置错误?
- ProjectBird 已在 POM 中列出
- 在设计时 Eclipse 上没有错误或问题
谢谢!
【问题讨论】:
-
ProjectBird 是如何打包的?您是否在 ProjectFalcon 依赖项列表中看到了相应的依赖项?
-
@m4rtin,它被打包为一个 jar,因为我已经将它作为一个 maven 工件安装在我的 .m2 存储库中。它出现在 Maven 的依赖项下,不是作为一个 jar,而是作为一个项目。
-
如果将其打包为 JAR,我认为将 ProjectFalcon 的这种依赖项包含为 JAR 而不是项目会更干净。我可能是错的,但是将它作为 Project 的问题是您必须确保正确附加了源,而鉴于您的 FileNotFoundException. 似乎并非如此
-
@m4rtin,实际上我已经通过 Maven 从 ProjectBird 创建了一个 jar,并将其作为依赖项导入到 ProjectFalcon 的 POM 文件中:
-->com.mycompany project-bird 1.0.0-SNAPSHOT -
好吧,我认为它应该可以工作,而且由于它是作为 JAR 导入的,因此您绝对可以删除 ProjectFalcon 中的 ProjectBird Project 依赖项。您是手动导入 ProjectBird JAR 还是将其发布到本地 maven repo 并让 maven 将其导入 ProjectFalcon 的依赖项?如果是后者,恐怕我不知道:|
标签: java eclipse spring maven spring-mvc