web-dev-qa-db-fra.com

Slf4j: dépendance slf4j-api trouvée mais aucun fournisseur n'a été trouvé

J'utilise Lombok. Il y a quelque temps lors de la construction d'un projet, le compilateur a commencé à émettre le message suivant:

Dépendance slf4j-api trouvée mais aucun fournisseur n'a été trouvé. Vouliez-vous ajouter slf4j-simple? Voir https://www.slf4j.org/codes.html#noProviders .

Si vous suivez le lien, il y a un commentaire assez vague:

Cet avertissement, c'est-à-dire qu'il ne s'agit pas d'une erreur, est signalé lorsqu'un fournisseur SLF4J n'a pu être trouvé sur le chemin de classe. Le placement d'un (et d'un seul) slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar ou logback-classic.jar sur le chemin de classe devrait résoudre le problème. Notez que ces fournisseurs doivent cibler slf4j-api 1.8 ou version ultérieure.

En l'absence d'un fournisseur, SLF4J sera par défaut un fournisseur d'enregistrement sans opération (NOP).

Veuillez noter que slf4j-api version 1.8.x et versions ultérieures utilisent le mécanisme ServiceLoader. Les versions antérieures s'appuyaient sur le mécanisme de liant statique qui n'est plus honoré par slf4j-api. Veuillez lire l'entrée FAQ Qu'est-ce qui a changé dans SLF4J version 1.8.0? Pour plus de détails importants.

Si vous êtes responsable de l'empaquetage d'une application et que vous ne vous souciez pas de la journalisation, le fait de placer slf4j-nop.jar sur le chemin de classe de votre application supprimera ce message d'avertissement. Notez que les composants intégrés tels que les bibliothèques ou les frameworks ne doivent pas déclarer de dépendance sur les fournisseurs SLF4J mais dépendent uniquement de slf4j-api. Lorsqu'une bibliothèque déclare une dépendance à la compilation à un fournisseur SLF4J, elle impose ce fournisseur à l'utilisateur final, annulant ainsi l'objectif de SLF4J.

Je ne sais pas comment le faire correctement. Si vous avez une expérience, veuillez m'expliquer comment le faire.

Il a révélé que je dois avoir logback-classic dans build.gradle de chaque module ou dans root gradle pour éviter l'avertissement.