将 log4j maven 依赖项添加到战争中,而无需在编译时使用它



我们的应用程序使用 slf4j,但依赖于

  1. SLF4J 接口
  2. SLF4j over log4j
  3. log4j

问题在于,IDE经常从log4j而不是slf4j导入类。理想情况下,我只想将 slf4j api 作为我的应用程序的 maven 依赖项,并且仅在我构建战争时将 slf4j 与 log4j 绑定打包。

到目前为止,我找到了几种解决方案:

  1. 将 libs 添加到 WEB-INF/lib 文件夹。这很糟糕,因为我没有 maven 依赖项控制,并且必须将二进制存储在我的存储库中,这不是最好的做法。
  2. 使用带有叠加层的 maven-war 插件。但据我了解,将依赖关系添加到覆盖层将需要声明依赖关系(至少在编译时)

可以只依赖 slf4j api 吗?如何在不将其声明为项目依赖项的情况下将其他依赖项打包到战争中?

谢谢!

只需在运行时范围内指定对 slf4j-log4j 的依赖关系。

因此,在编译和测试期间,运行时范围内的类将不可用。同样在 IDE 中它不应该是可见的 - 我在 IntelliJ 中检查了它。

当然,所有具有运行时范围的工件都将放在 WEB-INF/lib 目录中。

例:

    ...
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
        <scope>runtime</scope>
    </dependency>
    ...

最新更新