为何Maven项目中缺失SLF4J Logger与LoggerFactory导入?
解决SLF4J类丢失与Java版本兼容问题
嘿,我看你遇到了这么个麻烦:之前好好用着SLF4J的Logger和LoggerFactory,加了exec-maven-plugin后先是IntelliJ提示用Java 5,修复版本问题后反而找不到这两个类了,只能用JDK自带的日志类。咱们来一步步搞定它:
1. 先解决SLF4J依赖的核心问题
你现在把slf4j-simple放在<dependencyManagement>里了,但这个标签只是用来统一管理依赖版本的,不会把依赖真正引入到你的项目中。得把它移到<dependencies>节点下,让Maven把这个jar包拉到项目里:
<dependencies> <!-- 显式引入SLF4J的简单实现依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.28</version> </dependency> </dependencies>
这一步是关键,之前找不到Logger和LoggerFactory就是因为项目里根本没加载SLF4J的类文件。
2. 让exec-maven-plugin乖乖用Java 11
虽然你已经在<properties>里指定了编译用Java 11,但exec-maven-plugin的老版本(比如你用的1.2.1)默认可能会用Java 5来执行程序。有两个办法解决:
方法一:升级插件到新版本
直接把插件版本升到3.1.0,这个版本对Java 8+的支持更友好,不用额外配置就能识别项目的Java版本:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>com.demo.blocking.InToOut_BlockingServer_AutoClose</mainClass> </configuration> </plugin>
方法二:给老版本插件指定Java版本
如果不想升级,就在插件配置里明确指定用Java 11的执行路径:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>com.demo.blocking.InToOut_BlockingServer_AutoClose</mainClass> <!-- 指定JDK 11的java可执行文件路径 --> <executable>${java.home}/bin/java</executable> </configuration> </plugin>
3. 给IntelliJ做个"刷新重启"
有时候IDE的缓存会拖后腿,修改完pom.xml后:
- 点击右侧Maven面板上的蓝色刷新箭头,同步依赖
- 如果还是不行,就去
File -> Invalidate Caches...,选择Invalidate and Restart,让IDE彻底刷新缓存
最后验证一下
- 保存修改后的pom.xml,执行
mvn clean compile,确保编译没有报错 - 回到IntelliJ,看看
Logger和LoggerFactory的引用是不是恢复正常了
内容的提问来源于stack exchange,提问作者chrips
相关产品推荐
相关产品推荐

