Java 多模块Spring项目:覆盖测试中的资源文件
我有一个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
.
├── 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之间确实有所不同。