我有一个多模块 Maven 项目,包含两个模块:
network
和 devenv
。项目结构如下所示:
service
├── network
│ ├── src
│ │ ├── main
│ │ ├── test
│ │ │ └── resources
│ │ │ └── application-bridge-to-bridge-test.properties
│ └── resources
├── devenv
│ └── resources
│ └── application.properties (contains all properties needed for production)
└── pom.xml
network
模块的测试需要从application.properties
初始化属性,然后使用application-bridge-to-bridge-test.properties
覆盖某些值(特定于网络测试)。
在本地,我通过将以下内容添加到我的网络测试类来管理此问题:
@TestPropertySource(locations = {
"file:../devenv/src/main/resources/application.properties.properties",
"classpath:application-bridge-to-bridge-test.properties"
})
这在本地工作得很好,但是当管道触发 CI/CD 上的测试时,我得到以下异常:
java.lang.IllegalStateException: Failed to add PropertySource to Environment...
额外限制: 我们无法将 devenv 模块导入到网络中,因为网络是 devenv 的依赖项。这种循环依赖会破坏构建。
我的问题是:
network
和 devenv
属性文件大部分相同,开发人员很容易忘记在进行更改时更新这两个文件。任何建议或最佳实践将不胜感激!
您可以考虑将
application.properties
中的 devenv
文件中的所有公共配置提取到新的 application-common.properties
文件中。这个新文件应该位于 devenv
和 network
都引入的模块中。
此时你可以这样介绍
@TestPropertySource({“classpath: application-common.properties”})
或许
@TestPropertySource({“classpath*:application-common.properties”})
抱歉我没有用过这种方法。如果考虑配置中心(例如nacos),可能会更容易。