从类路径加载 jar 的 context.xml

Posted

技术标签:

【中文标题】从类路径加载 jar 的 context.xml【英文标题】:Loading a jar's context.xml from classpath 【发布时间】:2014-07-30 11:47:31 【问题描述】:

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

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

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

然后我使用eclipse而不是maven直接将它添加到类路径中以避免每次编译(最终目标是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]
...

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

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

【问题讨论】:

你必须在 src/main/resources 中添加 jar,这是包含最终在类路径中的资源的默认目录 也不工作。如果我只是在 ressources 文件夹中添加 jar,spring 不会加载它,我无法再使用类加载器找到它。 Maven build 将所需的 jar 复制到 war 中的 lib 文件夹中,以确保它们在部署 war 时可用。 在这种情况下,我试图在 eclipse 中运行它而不将它部署在 tomcat 上。但是目标是使用tomcat的共享lib文件夹,这也不起作用。我认为问题与为什么我首先尝试仅运行和 eclipse 以抽象 tomcat 配置问题有关。 @Nereis 在您的 jar 中的哪个文件夹中是 mycontext.xml 文件,要工作,它应该在 src/main/reaources 中,然后您可以像正常依赖项一样添加 jar 【参考方案1】:

终于在eclipse上找到了解决办法。

问题出在**中

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

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

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

【讨论】:

以上是关于从类路径加载 jar 的 context.xml的主要内容,如果未能解决你的问题,请参考以下文章

类路径中的某些运行时 JAR 文件的版本不兼容。考虑将它们从类路径中删除

从类路径加载文件

从类路径加载资源

如何使用 informix.jvp.dbapplet.impl.JVPClassLoader 从类路径加载资源?

无法从类路径上的 /AwsCredentials.properties 文件加载 AWS 凭证

Spring Boot 从类路径加载 H2 db 文件