Spring ResourceLoader在JAR中找不到资源

时间:2014-02-02 14:55:28

标签: java spring

我希望基于Spring配置创建层次结构。最简单的形式是几个“核心”库和几个能够覆盖“核心”库中的bean的“自定义”项目。

当通过Maven运行非常简单的单元测试时,无法找到导致测试失败的“核心”配置。

final Resource[] resources = applicatonContext.getResources("classpath*:core-*spring.xml");

什么都不返回。它无法找到位于我的自定义项目核心依赖项中的预期core-one-spring.xmlcore-two-spring.xml

Spring的默认行为是不是也要查看类路径中的JAR?或者我有什么特别的事情要做吗?

当我在IDE(IntelliJ)中运行时,测试完全传递,因为整个项目已加载,它们只是Spring可以找到的文件。

更新

如果我在没有通配符的情况下明确添加文件,Spring就能找到这些文件。

@ContextConfiguration({"classpath:core-one-spring.xml", "classpath:core-two-spring.xml", "classpath:custom-spring.xml", "classpath:test-spring.xml"})

final Resource[] resources = custom.getResources("classpath:core-one-spring.xml");

1 个答案:

答案 0 :(得分:3)

来自manual

  

请注意,“类路径*:”与Ant样式模式结合使用时,只能在模式启动前与至少一个根目录可靠地工作,除非实际目标文件驻留在文件系统中。这意味着像“classpath *:*。xml”这样的模式不会从jar文件的根目录中检索文件,而只能从扩展目录的根目录中检索文件。这源于JDK的ClassLoader.getResources()方法中的限制,该方法仅返回传入的空字符串的文件系统位置(指示搜索的潜在根)。