我有一个使用3个自制库的java webapp项目。这是布局:
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
我想在这4个java项目中使用Slf4j日志记录。在我的IDE中,这是4个独立的java项目。只有A是动态Web项目。通过将jar slf4j-api添加到每个java项目中,我能够在相关类中实例化记录器,并且我的代码编译得很好。
接下来,我将slf4j-log4j binder jar和log4j jar(带有匹配版本)和log4j.properties文件一起添加到我的所有项目中。现在每个项目实际上都会使用log4j实现来记录一些东西
我知道我的4个项目中的每个项目都有相同的slf4j和log4j版本,而且我也知道顶级项目依赖于其他3个项目,最终它们将被打包在一个大的war文件中。因此,将所有必要的罐子单独添加到每个项目中会感到多余。但是,我无法删除它们,因为这样每个项目都不会编译。
我正在使用maven,我想知道我应该在哪个pom中编写哪些依赖项,以及在哪个项目中我需要添加一个log4j.properties文件,以便每个项目在IDE中单独给出(编译)错误,但我也最大限度地减少了相同日志库的冗余包含。
我认为只添加slf4j-api就足够了库B,C和D,而且我只需要在webapp项目中提供一个实现(log4j + log4j binder)。但是,我在4个项目中仍然拥有相同的jar。
答案 0 :(得分:1)
您是对的,您在B,C和D中唯一的编译时日志记录依赖项应该在slf4j-api
上。 (我们的想法是,如果将这些库提供给其他人,他们可以免费使用log4j
,logback
或其他任何内容。)
您也是对的,它只是您的webapp项目,或者更常见的是您在运行时实际需要执行日志记录的项目,需要具体的log4j
绑定。它也只是需要log4j.properties
文件的项目(在类路径中,在运行时)。
由于子模块正在编码SLF4J
api,因此无法避免它们在slf4j-api
上具有编译时依赖性。如果您不想多次声明该依赖项,那么您可以让它们从公共父pom继承该依赖项。