Java 从runnable jar访问外部Spring配置文件

Java 从runnable jar访问外部Spring配置文件,java,spring,classpath,executable-jar,component-scan,Java,Spring,Classpath,Executable Jar,Component Scan,下面是我的目录结构 /app/infra/myjar/bin --> contains my runnable jar /app/infra/myjar/config --> contains all external config files which I want to read from code which is inside jar. 下面是我读取外部spring配置文件的代码 ApplicationContext basicConfig = new ClassPat

下面是我的目录结构

/app/infra/myjar/bin --> contains my runnable jar
/app/infra/myjar/config --> contains all external config files which I want to read from code which is inside jar.
下面是我读取外部spring配置文件的代码

ApplicationContext basicConfig =  new ClassPathXmlApplicationContext("classpath:/spring-bean-mapping.xml");
我的清单文件有以下条目

Class-Path:
.
../config/
此外,我还将.bashrc中的CLASSPATH变量设置为指向/app/infra/myjar/config文件夹

当我试图使用

java -jar myjar.jar
我得到了以下例外

Loading Spring Bean Mapping file
log4j:WARN No appenders could be found for logger        (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-bean-mapping.xml]; nested exception is      java.io.FileNotFoundException: class path resource [spring-bean-mapping.xml] cannot be opened because it does not exist
    at  org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
    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:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.vzw.esper.alerts.consumer.EsperMessagesConsumer.main(EsperMessagesConsumer.java:47)
Caused by: java.io.FileNotFoundException: class path resource [spring-bean-mapping.xml]  cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 13 more
Exception in thread "main" java.lang.NullPointerException
    at com.vzw.esper.alerts.consumer.EsperMessagesConsumer.main(EsperMessagesConsumer.java:86)
加载springbean映射文件
log4j:WARN找不到记录器(org.springframework.core.env.StandardEnvironment)的追加器。
log4j:警告请正确初始化log4j系统。
log4j:请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig 更多信息。
org.springframework.beans.factory.BeanDefinitionStoreException:IOException解析来自类路径资源[springbean mapping.XML]的XML文档;嵌套异常为java.io.FileNotFoundException:无法打开类路径资源[SpringBean mapping.xml],因为它不存在
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
位于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:130)
位于org.springframework.context.support.AbstractApplicationContext.AcquitainFreshBeanFactory(AbstractApplicationContext.java:537)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于com.vzw.esper.alerts.consumer.esperMessageConsumer.main(esperMessageConsumer.java:47)
原因:java.io.FileNotFoundException:无法打开类路径资源[spring bean mapping.xml],因为它不存在
位于org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
... 还有13个
线程“main”java.lang.NullPointerException中出现异常
位于com.vzw.esper.alerts.consumer.esperMessageConsumer.main(esperMessageConsumer.java:86)

我如何理解这里出了什么问题?

幸运的是,我能够解决上述问题。问题是,当我通过Eclipse创建一个可执行jar时,它覆盖了我的
MANIFEST.MF
类路径条目


因此,在jar创建之后,我更改了
MANIFEST.MF
文件,使其具有所需的条目,并且它工作正常。

我能够解决第二个问题,即spring组件扫描的问题

我遵循下面的春天论坛链接,它的工作


(注意:如果你得到的是部分解决方案,那么可以将其作为答案,但请不要在答案中提出其他问题。这些问题应该在新问题中提出)。