Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java类加载jar中的Applicationcontext.xml_Java_Spring_Jar - Fatal编程技术网

使用java类加载jar中的Applicationcontext.xml

使用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 =

我有一个名为SpringPoc.jar的jar,我使用eclipse作为可运行jar导出了它

在这个罐子里,我有两个类 一是

第二类是主应用程序

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");