gpt4 book ai didi

java - slf4j 库的冗余包含

转载 作者:行者123 更新时间:2023-12-01 10:49:58 25 4
gpt4 key购买 nike

我有一个java webapp项目,使用了3个自制的库。布局如下:

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 文件中。因此,将所有必要的 jar 单独添加到每个项目中感觉是多余的。但是,我无法删除它们,因为这样每个项目都无法单独编译。

我正在使用maven,我想知道我应该在哪个pom中编写哪些依赖项,以及在哪个项目中我需要添加一个log4j.properties文件,以便每个项目在我的IDE中单独给出没有(编译)错误,但我也最大限度地减少了相同日志库的冗余包含。

我认为对于库B、C和D来说,只需要添加slf4j-api就足够了,并且我只需要在webapp项目中提供一个实现(log4j + log4j binder)。然而,我在 4 个项目中仍然有相同的 jar。

最佳答案

你是对的,B、C 和 D 中唯一的编译时日志依赖项应该位于 slf4j-api 上。 (这个想法是,如果这些库提供给其他人,他们就可以自由使用 log4jlogback 或其他任何东西。)

您也是对的,只有您的 webapp 项目,或者更一般地说,您实际想要在运行时执行日志记录的任何项目,都需要具体的 log4j 绑定(bind)。也只有该项目需要 log4j.properties 文件(在类路径中,在运行时)。

由于子模块正在对 SLF4J api 进行编码,因此无法避免它们对 slf4j-api 具有编译时依赖性。如果您不想多次声明该依赖项,那么您可以让它们全部从公共(public)父 pom 继承该依赖项。

关于java - slf4j 库的冗余包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com