尝试进行MAVEN INSTALL时出现此错误。我尝试排除,但不确定pom文件中的位置。让我在pom文件中应如何以及应使用哪些排除标签。我还将我的pom文件片段附加在其中,以包括排除项SLF4J:类路径包含多个SLF4J绑定。
SLF4J:找到绑定 [jar:file:/ C:/Users/147188/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/ org / slf4j / impl / StaticLoggerBinder .class]
SLF4J:找到绑定 [jar:file:/ C:/Users/147188/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.10.0/log4j-slf4j-impl-2.10.0.jar!/ org /slf4j/impl/StaticLoggerBinder.class]
SLF4J:请参见http://www.slf4j.org/codes.html#multiple_bindings 说明。 SLF4J:实际绑定类型 [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
POM文件:
<!-- Start of required part to make log4j work -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<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-log4j2</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- End of required part to make log4j work -->
答案 0 :(得分:2)
1次运行
mvn dependency:tree
查看导入org.slf4j的软件包
2保留一个,排除另一个
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
答案 1 :(得分:0)
该消息表明您同时引入了logback-classic和log4j-slf4j-impl,它们都希望成为SLF4J绑定到的日志记录框架。如果不确定哪个依赖项带来了其他依赖项,我发现运行“ mvn dependency:tree”以查看所使用的依赖项树非常有用。那应该给您足够的信息来确定您需要排除哪个日志框架绑定。
正如documentation that the warning points to you所说,
诸如库或框架之类的嵌入式组件不应声明对任何SLF4J绑定的依赖,而只能依赖slf4j-api。当库声明对SLF4J绑定的编译时依赖性时,它会将绑定强加给最终用户,从而否定了SLF4J的目的。当您遇到一个嵌入式组件声明对任何SLF4J绑定的编译时依赖性时,请花时间联系该组件/库的作者,并请他们改正其方式。
您几乎要从所有依赖项中排除所有实际的日志记录框架,因此,唯一使用的日志记录框架就是您明确添加的框架。我什至经常发现设置一些maven-enforcer-plugin bannedDependencies规则很有用,以确保在更新依赖项时不会意外引入另一个日志记录框架。在您的POM中使用dependencyManagement部分以确保所有依赖项都使用相同版本的slf4j-api也会有所帮助。
答案 2 :(得分:0)
排除默认日志记录并配置log4j进行记录的正确方法。 如果此依赖项尚未存在,请在Spring Boot项目中添加
<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>
答案 3 :(得分:0)
我遇到了同一个log4j-slf4j多重绑定问题。导致此问题的原因有多种(此问题困扰很多:)。请在下面找到评论。
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/
当您使用“ spring-boot-starter”依赖项时,SB(Spring-Boot)会自动下载所有这些依赖项模块。在我的项目中,我使用的是slf4j-1.7.21,这造成了多个slf4j版本问题。简而言之,SB无法在运行时识别要使用的slf4j版本。因此,首先我将slf4j版本更改为1.7.25(与Spring-Boot版本1.4.7兼容)。
希望这可以解决问题。