2

我需要使用当前 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。如果类路径中有另一个人,它只匹配这个文件。

4

1 回答 1

6

The classpath*: I think has a limitation doesn't work for files under the root folder. Try moving the files under a folder - something like spring/application-a.xml and spring/application-b.xml. Then you can have a path classpath*:/spring/application-*.xml.

于 2012-05-10T06:46:13.097 回答