使用java类加载jar中的Applicationcontext.xml
我有一个名为SpringPoc.jar的jar,我使用eclipse作为可运行jar导出了它 在这个罐子里,我有两个类 一是 第二类是主应用程序使用java类加载jar中的Applicationcontext.xml,java,spring,jar,Java,Spring,Jar,我有一个名为SpringPoc.jar的jar,我使用eclipse作为可运行jar导出了它 在这个罐子里,我有两个类 一是 第二类是主应用程序 public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("com/serv/Beans.xml"); CallMeth obj =
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("com/serv/Beans.xml");
CallMeth obj = (CallMeth) context.getBean("callMeth");
obj.test();
}}
我在Beans.xml中定义了一个bean
<bean id="callMeth" class="com.poc.CallMeth"/>
当我运行测试类时
我得到下面的错误
Sep 09, 2016 11:48:30 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c50507: startup date [Fri Sep 09 11:48:30 IST 2016]; root of context hierarchy
Sep 09, 2016 11:48:30 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [com/serv/Beans.xml]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.callit.Scheduler.callMe(Scheduler.java:40)
at com.callit.Scheduler.main(Scheduler.java:15)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [com/serv/Beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [com/serv/Beans.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.serv.NormalServlet.executeScheduler(NormalServlet.java:17)
... 6 more
Caused by: java.io.FileNotFoundException: class path resource [com/serv/Beans.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
... 19 more
2016年9月9日上午11:48:30 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext@1c50507:启动日期[Fri Sep 09 11:48:30 IST 2016];上下文层次结构的根
2016年9月9日上午11:48:30 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息:从类路径资源[com/serv/Beans.XML]加载XMLBean定义
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于com.callit.Scheduler.callMe(Scheduler.java:40)
位于com.callit.Scheduler.main(Scheduler.java:15)
原因:org.springframework.beans.factory.BeanDefinitionStoreException:IOException解析来自类路径资源[com/serv/beans.XML]的XML文档;嵌套异常为java.io.FileNotFoundException:无法打开类路径资源[com/serv/Beans.xml],因为它不存在
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
位于org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
位于org.springframework.context.support.AbstractApplicationContext.AcquitainFreshBeanFactory(AbstractApplicationContext.java:540)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于com.serv.NormalServlet.executeScheduler(NormalServlet.java:17)
... 还有6个
原因:java.io.FileNotFoundException:无法打开类路径资源[com/serv/Beans.xml],因为它不存在
位于org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
... 还有19个
如果我从cmd运行相同的jar
作为java-jar sprinpoc.jar
调用MainApp类,Beans.xml可以正常加载
问题是,当我从测试类外部调用Normalservlet时,为什么不加载它
非常感谢只要依赖项jar包含xxx.xml文件,它就应该也可以在宿主项目类路径中使用。这将在类路径中的任何位置搜索applicationcontext.xml
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext.xml");
只要依赖项jar包含xxx.xml文件,它就应该在宿主项目类路径中也可用。这将在类路径中的任何位置搜索applicationcontext.xml
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext.xml");
XML文件位于何处?@Jens XML位于com.serv包下,此处NomalServlet类existsTry用于在PathPerted ApplicationContext context=new ClassPathXmlApplicationContext(“/com/serv/Beans.XML”)前面添加斜杠;获取由以下原因引起的异常:org.springframework.beans.factory.BeanDefinitionStoreException:IOException从类路径资源[com/serv/beans.XML]解析XML文档;嵌套异常是java.io.FileNotFoundException:类路径资源[com/serv/Beans.xml]无法打开,因为它不存在XML文件位于何处?@Jens XML位于com.serv包下,此处NomalServlet类存在,以便在PathTested ApplicationContext context=new ClassPathXmlApplicationContext(“/com/serv/Beans.XML”)前面添加斜杠;获取由以下原因引起的异常:org.springframework.beans.factory.BeanDefinitionStoreException:IOException从类路径资源[com/serv/beans.XML]解析XML文档;嵌套异常为java.io.FileNotFoundException:类路径资源[com/serv/Beans.xml]无法打开,因为它不存在尝试过的ApplicationContext上下文=新的ClassPathXmlApplicationContext(“classpath*:**/Beans.xml”);它抛出nobeanfound异常。但我认为它不会加载xml。因为我将上述代码修改为ApplicationContext context=new ClassPathXmlApplicationContext(“classpath*:**/beans1.xml”)。注意:我没有名为beans1.xml的xml。。。它仍然抛出了一个nobeanfoundexceptionexact异常,原因是:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“callMeth”的bean如果可能没有加载,您确定您的jar在类路径中可用吗?jar位于单独的位置
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext.xml");