2015-11-28 4 views
0

У меня есть проект java webapp, который использует 3 самодельные библиотеки. Вот планировка:Резервное включение библиотек slf4j

Top level project A 
| 
+- Self-made library B (no dependencies on C or D) 
+- Self-made library C (depends on D) 
+- Self-made library D (no dependencies on B or C) 
| 
+- Other libraries that I didn't make myself 

Я хочу использовать регистрацию Slf4j в этих 4 проектах java. В моей среде IDE это 4 отдельных Java-проекта. Только A - это динамический веб-проект. Добавляя jar slf4j-api в каждый проект java, я могу создать экземпляр регистраторов в соответствующих классах, и мой код компилируется отлично.

Далее я добавляю к каждому из моих проектов блок связывания slf4j-log4j и банку log4j (с соответствующими версиями) вместе с файлом log4j.properties. Теперь каждый проект будет фактически записывать что-то, используя реализацию log4j.

Я знаю, что каждый из моих 4 проектов имеет одну и ту же версию slf4j и log4j, и я также знаю, что проект верхнего уровня зависит от 3 других, и все они будут быть упакованными в один большой файл войны в конце. Из-за этого кажется излишним добавлять все необходимые банки в каждый проект индивидуально. Однако я не могу удалить их, потому что тогда каждый отдельный проект не будет компилироваться.

Я использую maven, и я хочу знать, в какой pom я должен написать, какие зависимости, и в каком проекте мне нужно добавить файл log4j.properties, чтобы каждый проект отдельно не приводил (компилировать) ошибки в моем IDE, но я также минимизирую избыточное включение одних и тех же журнальных библиотек.

Я думаю, что для библиотек B, C и D достаточно добавить только slf4j-api, и мне нужно предоставить реализацию (log4j + log4j binder) в проекте webapp. Однако, у меня все еще есть одна и та же банка в 4 проектах.

+0

Можете ли вы уточнить ошибку компилятора, которую видите, только если вы включили зависимость api с вашими библиотечными проектами? – sisyphus

ответ

1

Вы правы, ваша единственная зависимость от времени компиляции в B, C и D должна быть на slf4j-api. (Идея заключается в том, что если эти библиотеки были переданы кому-то еще, что они могли бы свободно использовать log4j, logback, или что-то еще.)

Вы также правы, что это только ваш проект веб-приложение, или вообще какой проект вам на самом деле хотят выполнить ведение журнала при его запуске, для чего требуется конкретная привязка log4j. Это также только тот проект, который нуждается в файле log4j.properties (в пути к классам, во время выполнения).

Поскольку подмодули кодируются в SLF4J api, не исключено, что они имеют зависимости времени компиляции от slf4j-api. Если вы предпочитаете не заявлять эту зависимость несколько раз, то вы можете заставить их всех наследовать эту зависимость от общего родительского пом.

Смежные вопросы