Java 多模块Spring项目:覆盖测试中的资源文件

Java 多模块Spring项目:覆盖测试中的资源文件,java,spring,maven,classloader,Java,Spring,Maven,Classloader,我有一个Spring项目,其结构如下: . ├── pom.xml ├── core-module │   ├── pom.xml │   └── src │   ├── main │   │   ├── java │   │   └── resources │   │   ├── applicationContext.xml │   │   └── file.xml │   └── test │   ├── jav

我有一个Spring项目,其结构如下:

.
├── pom.xml
├── core-module
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       │       ├── applicationContext.xml
│       │       └── file.xml
│       └── test
│           ├── java
│           └── resources
│               ├── file.xml
│               └── foo.xml
└── web-module
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        └── test
            └── java
在我的applicationContext.xml文件中,我有以下导入:

在生产中,我想使用
main
中定义的
file.xml
,在测试过程中,我想使用
test
文件夹中定义的文件;这实际上是我运行
核心模块测试时发生的事情

但是,当我运行
web模块的测试时,情况并非如此,使用的文件是
主文件夹中的文件。
如何实现我想要的

一些注意事项:

  • web模块
    核心模块
    有一个
    测试jar
    依赖关系,因此包含测试资源
  • 如果我进入
    target
    目录,则
    file.xml
    testclasses
    文件夹中的好文件
  • 当运行
    web模块
    测试时,如果我在Spring代码中设置了断点,那么
    file.xml上的
    getClass().getClassLoader().getResource()
    将返回在
    main
    中定义的断点,但是如果我在
    foo.xml
    文件上运行相同的方法,它将返回
    test
    文件夹中唯一可用的方法,因此这两个文件似乎都存在,但它的作用就像
    main
    接管
    test
    资源一样

谢谢大家!

是的,我认为它会进行类路径扫描,并获取它遇到的第一个类路径。您使用XML配置的原因是什么?这是一个遗留项目吗?@YassinHajaj你说得对。。。但是测试资源应该首先出现在类路径中:(@chrylis我更喜欢两者都使用,但我不确定这是否是这里的争论点。但是谢谢你的帮助。这是相关的,因为占位符配置在XML和JavaConfig之间确实有所不同。