为什么我需要在我的 pom 文件中添加 slf4j 作为依赖项才能使用 itext7 API?

Why do I need to add slf4j as a dependency in my pom file to use itext7 API?

我在我的 pom 文件中使用 iText 7 内核依赖项。但是当我调用任何 iText API 我得到错误:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

为了解决这个问题,我需要在我的 pom 文件中添加 slf4j 依赖项。

为什么我必须在我的 pom 文件中添加 itext 内部使用的依赖项?不应该是 itext 的责任有 slf4j 作为依赖吗?

首先我不会称之为错误。这是信息或警告,但肯定不是错误。

其次,slf4j-api 依赖项已经在您的类路径中。它是 iText 的依赖项,当您对 iText 有依赖项时,它会以可传递的方式自动添加。如果您最初没有这种依赖性,您实际上会得到一个错误,类似于 ClassNotFoundException.

您不必添加任何依赖项。当您添加 iText 时,所有必需的都已传递解析。如果您不需要记录并继续使用 iText,您可以忽略此警告。

iText 的依赖项是用于日志记录实现的通用 API,您可以自由选择是否要将任何日志记录信息返回给您(有时那里有非常有用的东西)或不是。这个通用 API 是 de-facto 今天的标准。用户可以自由选择他想要使用的记录器实现(记录器抑制、打印到控制台、写入文件等)。并且 iText 不应该为图书馆的用户决定这一点。您看到的这三行信息只是暗示您 iText 实际上记录了一些可能对您有用的信息,您可以根据需要设置记录器输出。

一些常见的记录器绑定是:

  • slf4j-log4j12:绑定 log4j 版本 1.2
  • slf4j-jdk14:绑定 java.util.logging
  • slf4j-nop:绑定 NOP(无操作)
  • slf4j-simple:打印到 System.err
  • 的绑定
  • slf4j-jcl:绑定 Jakarta Commons Logging

你可以在 Maven

上找到它们