You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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彻底刷新缓存

最后验证一下

  1. 保存修改后的pom.xml,执行mvn clean compile,确保编译没有报错
  2. 回到IntelliJ,看看Logger和LoggerFactory的引用是不是恢复正常了

内容的提问来源于stack exchange,提问作者chrips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:39