Maven - это инструмент для сборки, а Log4j - это библиотека, которая вступает в игру во время выполнения.
Следовательно, неясно, чего именно вы пытаетесь достичь.
Чтобы получить правильные значенияопределения log4j, его определения (конфигурации) должны появляться в артефакте, и maven «заканчивается», когда артефакт готов (хорошо, есть install
и deploy
, но они выполняют только «механические» действия над уже подготовленнымартефакт и не меняйте его).
Теперь артефакты можно условно разделить на 2 типа:
- Приложение, предназначенное для развертывания на сервере (обычно это WARS, EARs, spring-загрузочные приложения и т. д.)
- Библиотеки, предназначенные для внутреннего использования приложениями вашего проекта или библиотеками, которые должны быть общедоступными (например, сам log4j, hibernate, spring и т. д.)
Обычно только у артефактов первого типа есть определения ведения журнала (log4j2.xml, что угодно).Библиотеки, хотя и могут использовать каркас журналирования, не имеют своих собственных определений, потому что только приложение, которое использует библиотеку, «знает», как «обслуживать» журналы (приложения, шаблоны, которые будут применяться и т. Д.)
Теперь, применяя эти знания к вашему вопросу: я предполагаю, что module-core - это библиотека, а module-a и module-b - приложения.
Если это так, у них должен быть свой собственный файл log4j2.xml впуть к классу во время выполнения .Обычно люди помещают файл конфигурации в src/main/resources
этих модулей, и все готово - каждый log4j2.xml может отличаться.Кроме того, они импортируют файл из некоторого «общего» расположения, если цель состоит в том, чтобы сохранить одинаковое поведение log4j (опять же, во время выполнения) между приложениями.
Теперь, сказав все это, maven запустит тесты во времяbuild, и это единственное место, где вы видите, что maven запускает ваш код на самом деле во время сборки .
Тесты в maven имеют другой путь к классу, поэтому, если цель состоит в том, чтобы установить другое поведение log4j в тестах , вы должны поместить конфигурации регистрации в src/test/resources
.Ни этот файл, ни сами тесты не будут включены в производственный артефакт.
Эта практика применима как к "библиотекам", так и к "приложениям"