从classpath加载jar的context.xml

时间:2014-07-30 11:47:32

标签: java spring maven applicationcontext

我正在尝试加载一个jar内部的应用程序上下文作为插件。我用它来加载上下文:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**my-context.xml");

当我通过pom.xml加载jar时,它可以正常工作。

然后我使用eclipse而不是maven直接在classpath中添加它以避免每次编译(最终目标是tomcat中的共享lib文件夹,也不工作)。现在spring无法找到它并返回默认上下文(无例外)

我检查过它是否正确地插入到类路径中:

InputStream in1 = this.getClass().getClassLoader().getResourceAsStream("my-context.xml");

有效。

我查了一下日志。使用pom.xml,spring正在jar中搜索

Searching directory  [...target\classes\META-INF\maven\x.y.z] for files matching pattern [...\x.y.z/target/classes/**/my-context.xml]
Searching directory  [...ehealth.poc.module1] for files matching pattern [D:/JRB/Projects/Vivates/workspaces/default/extcom/ehealth.poc.module1/target/classes/**/ecm-context.xml]
...
Resolved location pattern [classpath*:**/my-context.xml] to resources [file [...\target\classes\my-context.xml]]
Loading XML bean definitions from file [...\target\classes\my-context.xml]
...

在第二种情况下,关于我的罐子的日志中没有任何内容。

为什么当我使用maven或直接使用类路径时spring不具有相同的行为?除了在类路径中添加依赖项位置之外,我还在做其他事情吗?

1 个答案:

答案 0 :(得分:0)

最后,我们在eclipse上找到了解决方案。

问题来自** in

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**my-context.xml");

看起来**不会扫描.jar文件。设置直接路径是有效的:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:my-context.xml");