【发布时间】:2014-02-02 14:55:28
【问题描述】:
我正在寻找基于 Spring 配置的层次结构。最简单的形式是几个“核心”库和几个能够覆盖“核心”库中的 bean 的“自定义”项目。
当通过 Maven 运行非常简单的单元测试时,无法找到“核心”配置导致测试失败。
final Resource[] resources = applicatonContext.getResources("classpath*:core-*spring.xml");
什么都不返回。它无法找到位于我的自定义项目核心依赖项中的预期 core-one-spring.xml 或 core-two-spring.xml。
查看类路径上的 JAR 不是 Spring 的默认行为吗?或者我有什么特别的事情要做?
当我在我的 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");
【问题讨论】:
-
我不相信它可以在名称中间使用通配符。我认为
*只能与classpath前缀一起使用。 -
前缀与在名称中使用通配符无关。前缀与加载的文件数量有关。前缀
classpath加载单个(第一个找到的)资源,前缀classpath*将尝试加载与模式匹配的所有资源。 -
我不是这个意思,但我还是错了。您确定您的 JUnit 测试配置将所有库都放在类路径中吗?
-
我很确定是这样,但是在 JUnit 测试期间如何检查类路径?
-
以简单的
@Test方法尝试these 之一。