将log4j maven依赖项添加到war中,而不需要在编译时使用它

时间:2013-12-26 14:00:18

标签: maven logging log4j war slf4j

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

  1. slf4j api
  2. slf4j over log4j
  3. 的log4j
  4. 问题是IDE经常从log4j导入类而不是从slf4j导入类。 理想情况下,我希望只有slf4j api作为我的应用程序的maven依赖项,并且仅在构建战争时将slf4j绑定到log4j。

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

    1. 将libs添加到WEB-INF / lib文件夹。这很糟糕,因为我没有maven依赖控制,并且必须在我的仓库中存储二进制文件,这不是最好的事情。
    2. 将maven-war插件与叠加层配合使用。但据我所知,添加依赖关系将需要声明依赖(至少作为编译)
    3. 是否可以只依赖slf4j api?如何将其他依赖项打包到war而不将它们声明为项目依赖项?

      谢谢!

1 个答案:

答案 0 :(得分:1)

请在运行范围内指定对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>
    ...