我希望基于Spring配置创建层次结构。最简单的形式是几个“核心”库和几个能够覆盖“核心”库中的bean的“自定义”项目。
当通过Maven运行非常简单的单元测试时,无法找到导致测试失败的“核心”配置。
final Resource[] resources = applicatonContext.getResources("classpath*:core-*spring.xml");
什么都不返回。它无法找到位于我的自定义项目核心依赖项中的预期core-one-spring.xml
或core-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");
答案 0 :(得分:3)
来自manual
请注意,“类路径*:”与Ant样式模式结合使用时,只能在模式启动前与至少一个根目录可靠地工作,除非实际目标文件驻留在文件系统中。这意味着像“classpath *:*。xml”这样的模式不会从jar文件的根目录中检索文件,而只能从扩展目录的根目录中检索文件。这源于JDK的ClassLoader.getResources()方法中的限制,该方法仅返回传入的空字符串的文件系统位置(指示搜索的潜在根)。