目录
Maven全局排除依赖
Maven排除依赖的方式有三种
- 黑名单maven-enforcer-plugin,打包时发现在黑名单中的依赖就会提示报错,对开发很不友好
- executions标签,只能根据实际依赖单个排除,很繁琐
- 制作同名空jar包,根据maven的就近原则,用空jar包替换
使用同名空jar包替换的方式,实现全局排除依赖功能
-
任意创建一个空文件(此方法部署在服务器上可能有问题,建议创建一个空类,如 __Empty__.class,打成一个工具jar),重命名为empty.jar -
将empty.jar放在项目的lib目录下
-
在pom文件中用dependency引入要排除的依赖
<!-- 如排除slf4j-jdk14 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>99.99.99</version><!-- 凭爱好写一个不存在的版本号即可 -->
<scope>system</scope><!-- scope指定为system -->
<systemPath>${basedir}/lib/empty.jar</systemPath><!-- 指定systemPath为空jar包 -->
</dependency>
pom.xml配置
spring-boot-starter-logging
springboot自带默认日志框架
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
可见SpringBoot默认集成了logback日志框架,并把log4j和java.util.logging桥接到slf4j。
jcl-over-slf4j替换commons-logging
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
log4j-over-slf4j替换log4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
jul-to-slf4j替换java.util.logging
由于spring-boot-starter-logging已包含jul-to-slf4j,所以只需要排除java.util.logging
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
log4j-to-slf4j替换log4j-slf4j-impl
由于spring-boot-starter-logging已包含log4j-to-slf4j,所以只需要排除log4j-slf4j-impl
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>99.99.99</version>
<scope>system</scope>
<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
logback-spring.xml部分配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!-- 借助LevelChangePropagator完全消除禁用日志语句的60倍转换开销 -->
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
...
...
...
</configuration>
最后声明
此教程未详细测试,如有任何问题,欢迎在评论区指出
2021-12-12更新 此教程已在线上运行,未发现问题