Class path contains multiple SLF4J bindings, exclusion not working,










1















I get the following error:



SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/org/slf4j/slf4j-jdk14/1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j /impl/StaticLoggerBinder.class]


I've already checked https://www.slf4j.org/codes.html#multiple_bindings
and similar questions. I've found using mvn dependency:tree that 4 dependencies use SLF4J so I've added the exclusion to them like this:



<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>



This didn't change anything and I still get the same error. I've tried deleting the .jar files specified in the warning but then I get error about missing classes. Also I'm using IntelliJ so maybe somehow reloading the pom.xml file is the issue here?










share|improve this question

















  • 1





    The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

    – Robert
    Mar 18 at 13:01
















1















I get the following error:



SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/org/slf4j/slf4j-jdk14/1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j /impl/StaticLoggerBinder.class]


I've already checked https://www.slf4j.org/codes.html#multiple_bindings
and similar questions. I've found using mvn dependency:tree that 4 dependencies use SLF4J so I've added the exclusion to them like this:



<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>



This didn't change anything and I still get the same error. I've tried deleting the .jar files specified in the warning but then I get error about missing classes. Also I'm using IntelliJ so maybe somehow reloading the pom.xml file is the issue here?










share|improve this question

















  • 1





    The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

    – Robert
    Mar 18 at 13:01














1












1








1








I get the following error:



SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/org/slf4j/slf4j-jdk14/1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j /impl/StaticLoggerBinder.class]


I've already checked https://www.slf4j.org/codes.html#multiple_bindings
and similar questions. I've found using mvn dependency:tree that 4 dependencies use SLF4J so I've added the exclusion to them like this:



<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>



This didn't change anything and I still get the same error. I've tried deleting the .jar files specified in the warning but then I get error about missing classes. Also I'm using IntelliJ so maybe somehow reloading the pom.xml file is the issue here?










share|improve this question














I get the following error:



SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/org/slf4j/slf4j-jdk14/1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j /impl/StaticLoggerBinder.class]


I've already checked https://www.slf4j.org/codes.html#multiple_bindings
and similar questions. I've found using mvn dependency:tree that 4 dependencies use SLF4J so I've added the exclusion to them like this:



<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>



This didn't change anything and I still get the same error. I've tried deleting the .jar files specified in the warning but then I get error about missing classes. Also I'm using IntelliJ so maybe somehow reloading the pom.xml file is the issue here?







java maven






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 22:01









VashVash

286




286







  • 1





    The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

    – Robert
    Mar 18 at 13:01













  • 1





    The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

    – Robert
    Mar 18 at 13:01








1




1





The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

– Robert
Mar 18 at 13:01






The first exclusion is wrong: the artifact to be excluded is org.slf4j:slf4j-jdk14.

– Robert
Mar 18 at 13:01













1 Answer
1






active

oldest

votes


















0














I think this is a bug/feature in Maven. Let's assume you have this dependency tree:



A
+---B
+---C
| +---D
|
+---D


and you exclude D on B, it will still be there because C also pulls it in. From Maven's point of view this makes sense because it doesn't try to understand whether there is a relationship between B and C. We know that they're all from Spring but Maven can't be so sure.



Solution: You need to duplicate the exclusion on C in your POM.



Use mvn dependency:tree to find all places where D is being used and add one exclusion each.



And make sure you actually exclude D. In your example above, you exclude org.slf4j:slf4j-log4j12 instead of org.slf4j:slf4j-jdk14






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53309378%2fclass-path-contains-multiple-slf4j-bindings-exclusion-not-working%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I think this is a bug/feature in Maven. Let's assume you have this dependency tree:



    A
    +---B
    +---C
    | +---D
    |
    +---D


    and you exclude D on B, it will still be there because C also pulls it in. From Maven's point of view this makes sense because it doesn't try to understand whether there is a relationship between B and C. We know that they're all from Spring but Maven can't be so sure.



    Solution: You need to duplicate the exclusion on C in your POM.



    Use mvn dependency:tree to find all places where D is being used and add one exclusion each.



    And make sure you actually exclude D. In your example above, you exclude org.slf4j:slf4j-log4j12 instead of org.slf4j:slf4j-jdk14






    share|improve this answer



























      0














      I think this is a bug/feature in Maven. Let's assume you have this dependency tree:



      A
      +---B
      +---C
      | +---D
      |
      +---D


      and you exclude D on B, it will still be there because C also pulls it in. From Maven's point of view this makes sense because it doesn't try to understand whether there is a relationship between B and C. We know that they're all from Spring but Maven can't be so sure.



      Solution: You need to duplicate the exclusion on C in your POM.



      Use mvn dependency:tree to find all places where D is being used and add one exclusion each.



      And make sure you actually exclude D. In your example above, you exclude org.slf4j:slf4j-log4j12 instead of org.slf4j:slf4j-jdk14






      share|improve this answer

























        0












        0








        0







        I think this is a bug/feature in Maven. Let's assume you have this dependency tree:



        A
        +---B
        +---C
        | +---D
        |
        +---D


        and you exclude D on B, it will still be there because C also pulls it in. From Maven's point of view this makes sense because it doesn't try to understand whether there is a relationship between B and C. We know that they're all from Spring but Maven can't be so sure.



        Solution: You need to duplicate the exclusion on C in your POM.



        Use mvn dependency:tree to find all places where D is being used and add one exclusion each.



        And make sure you actually exclude D. In your example above, you exclude org.slf4j:slf4j-log4j12 instead of org.slf4j:slf4j-jdk14






        share|improve this answer













        I think this is a bug/feature in Maven. Let's assume you have this dependency tree:



        A
        +---B
        +---C
        | +---D
        |
        +---D


        and you exclude D on B, it will still be there because C also pulls it in. From Maven's point of view this makes sense because it doesn't try to understand whether there is a relationship between B and C. We know that they're all from Spring but Maven can't be so sure.



        Solution: You need to duplicate the exclusion on C in your POM.



        Use mvn dependency:tree to find all places where D is being used and add one exclusion each.



        And make sure you actually exclude D. In your example above, you exclude org.slf4j:slf4j-log4j12 instead of org.slf4j:slf4j-jdk14







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 18 at 13:03









        Aaron DigullaAaron Digulla

        249k87477696




        249k87477696





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53309378%2fclass-path-contains-multiple-slf4j-bindings-exclusion-not-working%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Darth Vader #20

            How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

            Ondo