Java 如何解决log4j不同版本上的包冲突?
我根据一个spring引导示例编写了这个Java 如何解决log4j不同版本上的包冲突?,java,spring,maven,dependencies,packages,Java,Spring,Maven,Dependencies,Packages,我根据一个spring引导示例编写了这个pom.xml 当我启动我的应用程序时,我遇到了以下错误: SLF4J:在类路径上检测到log4j-over-SLF4J.jar和绑定的SLF4J-log4j12.jar,抢占StackOverflowerError。 我对Java和Maven完全陌生,在这里呆了很长一段时间 我试着在依赖项中编写一些排除项。但是没有成功。我不知道哪个包裹应该被排除在哪个包裹之外。如果是这样,所依赖的软件包如何正常工作 <?xml version="1.0" enco
pom.xml
当我启动我的应用程序时,我遇到了以下错误:
SLF4J:在类路径上检测到log4j-over-SLF4J.jar和绑定的SLF4J-log4j12.jar,抢占StackOverflowerError。
我对Java和Maven完全陌生,在这里呆了很长一段时间
我试着在依赖项
中编写一些排除项
。但是没有成功。我不知道哪个包裹应该被排除在哪个包裹之外。如果是这样,所依赖的软件包如何正常工作
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- Your own application should inherit from spring-boot-starter-parent -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-samples</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
<artifactId>spring-boot-sample-web-secure-jdbc</artifactId>
<name>Spring Boot Web Secure JDBC Sample</name>
<description>Spring Boot Web Secure JDBC Sample</description>
<url>http://projects.spring.io/spring-boot/</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>http://www.spring.io</url>
</organization>
<properties>
<main.basedir>${basedir}/../..</main.basedir>
</properties>
<dependencies>
<!-- Compile -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.0.0
org.springframework.boot
弹簧靴样品
2.0.0.1构建快照
spring引导示例web安全jdbc
SpringBootWebSecureJDBC示例
SpringBootWebSecureJDBC示例
http://projects.spring.io/spring-boot/
Pivotal软件公司。
http://www.spring.io
${basedir}/./。。
org.apache.hadoop
hadoop通用
3.0.0-2
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧启动装置
org.springframework.boot
弹簧靴启动器jdbc
com.h2数据库
氢
org.apache.httpcomponents
httpclient
测试
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
弹簧靴起动器
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
springbootmaven插件
我在pom.xml上看到,对log4j没有依赖关系。您应该将其放在pom.xml中:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j
log4j
1.2.17
发生这种情况是因为spring boot starter
正在拉入log4j-over-slf4j
依赖项,而您的另一个依赖项正在拉入log4j
运行mvn dependency:tree
,您应该能够找到哪个依赖项正在拉入不需要的log4j,并使用
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
org.slf4j
slf4j-log4j12
log4j
log4j
它可能只是其中之一,这取决于您在emvn dependency:tree上看到的内容
如果您更愿意使用log4j,那么显然只需将log4j-over-slf4j
从spring boot starter
中排除。这个问题是由于日志外观和日志框架调用之间的无休止循环造成的
我的情况稍微复杂一点。除了这个循环问题。我有两个日志框架
<>我最终排除了<强> Log4J-OFL-SLF4J 和<强> Log>经典< /强> ./p>你使用什么容器(服务器)来运行你的应用程序?考虑一下关于Spring引导日志记录的问题。这也是一个好的答案,假设这个答案是错的<代码>spring boot starter日志记录
是您所需要的全部。