SLF4J: Sınıf yolu birden çok SLF4J bağlantısı içeriyor


206

Aşağıdaki hatayı alıyorum. Görünüşe göre sl4j'ye bağlı çoklu kayıt çerçeveleri var. Bunu nasıl çözeceğinizden emin değilim. Herhangi bir yardım büyük beğeni topluyor.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

15
Çözülmüş kullanma <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> neden çakışmayı sorun yardımcı olduğunu (pom.xml arasında) dependecies içinde
user1493140


6

7
Belki bu soruya bir cevap (otomatik cevap) eklemek ve "Kabul Edildi" olarak işaretlemek daha iyi olabilir, Bu yüzden soru SO aramalarında "Çözüldü" olarak görünecektir
Roberto

1
Roberto, Geri bildiriminiz için teşekkür ederiz. Çözümü yorumdan kopyaladım ve cevap olarak gönderdim.
user1493140

Yanıtlar:


125

Çatışmaya neden olan bağımlılıklara (pom.xml) aşağıdaki hariç tutma eklenerek çözüldü.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 

10
Bu bağımlılık bu durumda çatışmaya neden oldu, ben bağımlılık ağacı var 3 söz slf4j
PUG

22
Log4j Yolunuz çalıştırmak mvn bağımlılığı nasıl biniyor olduğunu öğrenmek için: vasıtasıyla ağacın ve tarak, sonra pom.xml'Bu o bağımlılık için yukarıdaki ön bilgi eklemek
siber keşiş

1
@ user1493140 Hala benim için çalışmıyor. <dependency> <groupId> log4j </groupId> <artifactId> log4j </artifactId> <version> 1.2.17 </version> <exclusions> <exclusion> <groupId> org.slf4j </groupId> <artifactId> slf4j- log4j12 </artifactId> </exclusion> </exclusions> </dependency>
Ashok kumar Ganesan

1
benim için bir kavanoz savaşı daha. Ben id slf4j-nop ve slf4j-jdk14 ile eserleri hariç tutmak zorunda kaldı. Benim için çatışmaya neden olan bağımlılık yonca-maven-eklentiydi
ihebiheb

( slf4j-log4j12) sürümü herkes için geçerli mi? ya da sürümü mvn bağımlılığından bulmalıyız: ağaç ?
Lei Yang

59

Gradle sürümü;

configurations.all {
    exclude module: 'slf4j-log4j12'
}

2
Modellerin ana uygulamadan otomasyon çerçevesine aktarılması .. bu, gradle ile ilgili sorunumu çözdü. Ty.
Will

1
Bunu yapmanın karınca versiyonu var mı?
Balaji Boggaram Ramanarayan

1
no: ant bağımlılığa duyarlı bir araç değildir. Yapınızı sınıflandırmak için kuvvetle düşünün.
Matthew Mark Miller

1
sbt için inşa taşıma şiddetle tavsiye :)
ioleo

2
Mükemmel. Birkaç saatlik bağımlılık cehenneminden kurtardım beni!
jseals

24

Hata muhtemelen bunun gibi daha fazla bilgi verir (kavanoz adlarınız farklı olsa da)

SLF4J: [jar: file: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder içinde ciltleme bulundu .class] SLF4J: [jar: file: / D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar içinde ciltleme bulundu ! /org/slf4j/impl/StaticLoggerBinder.class]

Çatışmanın logback-classic-1.2.3ve adlı iki kavanozdan geldiğini fark ettim log4j-slf4j-impl-2.8.2.jar.

mvn dependency:treeBu proje pom.xml üst klasöründe çalıştırın ve şunları verin:

bağımlılık ağacı çatışması

Şimdi göz ardı etmek istediğinizi seçin (hassas bir çaba harcayabilir, bu konuda daha fazla yardıma ihtiyacım var)

Ben ithal birini kullanmak karar spring-boot-starter-data-jpaile (üst bağımlılık) spring-boot-starterve içinden spring-boot-starter-logging, pom olur:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

Yukarıdaki POM spring-boot-starter-data-jpakullanacakları spring-boot-starterolan hariç, aynı dosya yapılandırılmış loggingiçerdiği (logback )


1
Tanıttığınız için teşekkürler mvn dependency:tree. Çok yararlı ...
Jan Lochman

10

SBT sürümü:

exclude("org.slf4j", "slf4j-log4j12")Geçici olarak içerdiği bağımlılığa ekleyin slf4j-log4j12. Örneğin, Log4j 2.6 ile Spark kullanırken:

libraryDependencies ++= Seq(
  // One SLF4J implementation (log4j-slf4j-impl) is here:
  "org.apache.logging.log4j" % "log4j-api" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-core" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
  // The other implementation (slf4j-log4j12) would be transitively
  // included by Spark. Prevent that with exclude().
  "org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)

1
Sbt ne anlama geliyor?
Petrus Theron

3
Basit Yapı Aracı *
Benny

4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

Bunu silerek çözdüm: spring-boot-starter-log4j2


not clear: xml bölümünün üstündeki sil / yorum mu demek istediniz?
Lei Yang

3

O kavanoz dosyasını görmezden geldim / kaldırdım.

resim açıklamasını buraya girin


3

Sadece gerekli bağımlılığı kullanın, hepsi değil :))). Benim için, günlük işleminin normal çalışması için bu bağımlılığa ihtiyacınız var, diğerlerini pom.xml'den hariç tutun

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

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.8</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.8</version>
    </dependency>

3

Bu, StaticLoggerBinder.class sınıfı iki farklı kavanoza ait olduğu için bir sorundur. bu sınıf logback-classic-1.2.3.jar ve aynı sınıfa da başvurulur log4j-slf4j-impl-2.10.0.jar. sınıf yolunda her ikisi de kavanoz. Dolayısıyla aralarında çatışma var. Classpath [src / main / resource] içindeki log4j2.xml dosyası olsa da günlük dosyasının üretilmemesinin nedeni budur.

Kavanozdan birini seçtik, log4j-slf4j-impl-2.10.0.jar dosyasını kullanmanızı ve logback-classic-1.2.3.jar dosyasını hariç tutmanızı öneririz. Çözüm: pom dosyasını açın ve bağımlılık Hiyerarşisini görüntüleyin [eclipse] veya
mvn bağımlılığını çalıştırın : bağımlılık ağacını ve bağımlılığı indiren bağımlılık kaynağını bulmak için tree komutu. çelişkili bağımlılığı bul ve hariç tut. Springboot uygulaması için bunu deneyin.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
        </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

This is working fine for me after struggling a lots.

2

... org.codehaus.mojo cobertura-maven-eklenti 2.7 testi ch.qos.logback logback-classic tools com.sun ...

## Bununla düzelttim

... org.codehaus.mojo cobertura-maven-eklenti 2.7 testi ch.qos.logback logback-classic tools com.sun ...


2

Benim için log4j'den logback'e geçtikten sonra bir Eclipse / Maven sorunu olduğu ortaya çıktı. .classpathDosyanıza bir göz atın ve dizeyi arayın"log4j" .

Benim durumumda orada şunlar vardı: <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.7.1/slf4j-log4j12-1.7.1.jar"/> <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" />

Bu girişleri dosyadan kaldırmak (veya yeniden oluşturabilirsiniz) sorunu çözdü.


2

Benim için cevap, bir Maven'i yeniden inşa etmekti. Tutulmada:

  1. Projeye sağ tıklayın-> Maven -> Maven doğasını devre dışı bırak
  2. Projeye sağ tıklayın-> Yaylı Araçlar> Maven Bağımlılıklarını Güncelle
  3. Projeye sağ tıklayın-> Yapılandır> Maven Projesini Dönüştür

0

Ben de aynı problemi yaşadım. Benim pom.xml içinde her ikisi de vardı

 <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.28</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

Spring-boot-starter-web bağımlılığını sildiğimde sorun çözüldü.


-1

Kombinasyonu <scope>provided</scope>ve<exclusions> benim için çalışmadı.

Bunu kullanmak zorunda kaldım:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <scope>system</scope>
    <systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>

empty.jarİçinde tam anlamıyla hiçbir şey olmayan bir kavanoz dosyası nerede .


-5

Görünüşe göre .m2 dizini kaldırılıyor ve:

mvn install -DskipTests -T 4 bu sorunu benim için çözdüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.