我有一个具有以下结构的多模块 Maven 项目(遵循标准约定):
- 模块“核心”包含可重用代码
- 模块“a”、“b”和“c”除了它们自己的东西外,都有“核心”作为它们的依赖项。有许多模块,如“a”、“b”和“c”(超过 20 个)。
模块“a”、“b”和“c”的 test/resources 中有一个 log4j.xml 文件,但这些模块的 main/resources 中没有 log4j.xml。原因是我希望每个模块都有不同的日志记录配置。
但是,由于最近要求主应用程序将日志发送到电子邮件的要求发生变化,我已将带有 SMTPAppender 的 log4j.xml 添加到“核心”的 main/resources。我曾希望这将使 log4j.xml 在所有三个模块的类路径中可用,并且电子邮件可以正常工作。此外,我曾希望各个模块“a”、“b”和“c”中的 test/resources/log4j.xml 会覆盖“core”并像以前一样运行。
然而这并没有发生。即使在测试期间,“core”中的 main/resources/log4j.xml 在类路径中也可用,导致测试尝试发送我不想要的电子邮件。
因此,我想要一个解决方案,以确保在“a”、“b”和“c”中运行测试时不会使用“core”中的 main/resources/log4j.xml。
我搜索了其他类似的帖子,发现:如何在测试期间覆盖 log4j.properties?这是相似但不同的。它讨论了在“相同”项目中覆盖 log4j.xml,但我的情况不同,因为这是关于覆盖依赖项中可用的 log4j.xml。另外,由于两个原因,我不想将 test/resources/log4j.xml 重命名为其他名称并配置surefire插件以使用它:
- 我有很多模块,如“a”、“b”和“c”,我必须这样做,但我不想要
- 这会让其他开发人员乍一看代码看起来很神奇,直到他们发现(或者我在文档中交流)pom.xml 中有一个隐藏的技巧。
这有更简单的解决方案吗?感谢所有帮助。