我需要使用当前 Maven 构建中的“主要”applicationContext-a.xml 创建一个 ApplicationContext。另一个连接来自另一个 Maven 构建的类,并预设在 Maven 依赖项包含的 jar 中。
这里的想法:
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
"classpath*:applicationContext-*.xml"});
这应该从 Classpath 加载 applicationContext-a.xml,因为它在同一个项目中。这行得通。
然后应从依赖项 jar 加载 applicationContext-b.xml。 这行不通。
注意
"classpath*:applicationContext-*.xml"
仅匹配直接类路径中的 XML,jar 中不匹配。
我发现了什么:
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
"classpath*:applicationContext-*.xml", "classpath*:applicationContext-b.xml"});
这有效,但前提是我可以明确告诉 jar 中 xml 的文件名:applicationContext-b.xml
我还需要它来进行集成测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"**/applicationContext*.xml"})
public class TestClass { ... }
最好的主意可能是自定义加载器?必须有办法让这个模式工作......
前段时间有一个解决方案,反之亦然:它只从 jar 中获取 applicationContext.xml。如果类路径中有另一个人,它只匹配这个文件。