Maven schließt Testabhängigkeiten aus/entfernt, die im übergeordneten POM definiert sindJava

Java-Forum
Guest
 Maven schließt Testabhängigkeiten aus/entfernt, die im übergeordneten POM definiert sind

Post by Guest »

Dies ähnelt „Abhängigkeit in untergeordnetem POM ausschließen, das vom übergeordneten POM geerbt wurde“, mit der Ausnahme, dass es mit Test-- und Kompilierungsbereichen-Bereichen zu tun hat.
Das habe ich ein übergeordnetes POM, das die Abhängigkeit org.slf4j:slf4j-api enthält, sodass alle untergeordneten Projekte SLF4J für die Protokollierungs-API verwenden. Damit dann alle Projekte über eine Protokollierung für Unit-Tests verfügen können (unabhängig davon, welche SLF4J-Implementierung sie im Hauptteil, also im Nicht-Test-Teil des Projekts, verwenden), füge ich SLF4J Simple hinzu, aber nur im Test Geltungsbereich:

org.slf4j
slf4j-simple
test


(Ich verstehe die Ansicht, dass übergeordnete POMs keine Abhängigkeiten deklarieren und nur das Abhängigkeitsmanagement verwenden sollten. Obwohl ich im Allgemeinen nicht anderer Meinung bin, ist die Konfiguration von Tests eine andere Geschichte. Das tue ich nicht Ich möchte nicht, dass jedes einzelne Unterprojekt JUnit, Hamcrest, Hamcrest Optional, Mockito, Simple Logging usw. deklarieren muss. Das Test-Framework sollte für alle unsere Projekte einheitlich sein, ohne dass ein großer Aufwand an Zeremonien erforderlich ist, nur um ein einzurichten Projekt.)
Dies funktioniert gut, bis ein Projekt Foo Logback als SLF4J-Implementierung verwenden möchte.

ch.qos.logback
logback-classic
1.4.1


Das funktioniert gut für die Foo-Anwendung selbst, aber jetzt gibt es für die Foo-Tests plötzlich zwei konkurrierende SLF4J-Implementierungen: Logback und SLF4J simple. Dies stellt einen Bindungskonflikt dar:
SLF4J: Class path contains multiple SLF4J providers.
SLF4J: Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@363ee3a2]
SLF4J: Found provider [org.slf4j.simple.SimpleServiceProvider@4690b489]
SLF4J: See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual provider is of type [ch.qos.logback.classic.spi.LogbackServiceProvider@363ee3a2]

Ich muss einen der folgenden Schritte ausführen:
  • Im POM, wo ich die ch.qos einbringe. logback:logback-classic-Abhängigkeit muss ich org.slf4j:slf4j-simple vom übergeordneten POM ausschließen. (Dies ist die bevorzugte Lösung.)
    Im POM, in dem ich die Abhängigkeit ch.qos.logback:logback-classic einbringe, muss ich angeben, dass ch.qos.logback:logback-classic ist .logback:logback-classic gilt für alle Bereiche außer den Testbereich (um keinen Konflikt mit org.slf4j:slf4j-simple zu verursachen).< /li>
Ich weiß nicht so recht, wie ich das eine oder andere davon machen soll. Irgendwelche Ideen?
Ein Vorschlag war, org.slf4j:slf4j-simple mit provided neu zu deklarieren. Somit würde pom.xml für das Projekt Foo so aussehen:


ch.qos.logback
logback-classic



org.slf4j
slf4j-simple
provided



Leider funktioniert das nicht. SLF4J erkennt immer noch zwei SLF4J-Anbieter im Klassenpfad und zeigt die oben angezeigte Meldung an. Ein bereitgestellter Bereich verhindert lediglich, dass die Abhängigkeit transitiv in andere Projekte einbezogen wird. Es scheint, dass es nicht aus dem Klassenpfad des aktuellen Projekts entfernt wird.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post