如何管理多模块Maven项目中两个模块之间的测试属性?

问题描述 投票:0回答:1

我有一个多模块 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 的依赖项。这种循环依赖会破坏构建。

我的问题是:

  1. 有没有办法解决这个问题,以便测试在 CI/CD 管道中工作?
  2. 管理模块之间共享属性以避免重复的最佳实践是什么?
    network
    devenv
    属性文件大部分相同,开发人员很容易忘记在进行更改时更新这两个文件。

任何建议或最佳实践将不胜感激!

java maven dependencies
1个回答
0
投票

您可以考虑将

application.properties
中的
devenv
文件中的所有公共配置提取到新的
application-common.properties
文件中。这个新文件应该位于
devenv
network
都引入的模块中。 此时你可以这样介绍
@TestPropertySource({“classpath: application-common.properties”})
或许
@TestPropertySource({“classpath*:application-common.properties”})
抱歉我没有用过这种方法。如果考虑配置中心(例如nacos),可能会更容易。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.