记一次苍穹外卖项目 Maven 编译报错的排查与解决全过程

记一次苍穹外卖项目 Maven 编译报错的排查与解决全过程

一、问题背景

最近在启动黑马程序员《苍穹外卖》后端初始工程时,使用 IntelliJ IDEA 自带的 Maven 进行编译,控制台报出 BUILD FAILURE 错误,项目无法正常启动。

二、遭遇的第一个报错:中文路径乱码

报错日志节选:

text 复制代码
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK
[ERROR] Could not create local repository at C:\Users\魏旎洺\寒笔.m2\repository

原因分析:

由于 Windows 系统当前用户名包含中文字符(魏旎洺),Maven 在 GBK 编码环境下无法正确解析包含中文的本地仓库路径,导致本地仓库创建失败。所以在这告诫大家:电脑用户名一定要是英文的

解决方案:

想办法把用户名改为英文格式的,如果需要,可以看看我的另一篇文章。

三、遇到的第二个报错:Lombok 与 JDK 版本不兼容

解决路径问题后,再次编译,报错变为:

报错日志节选:

text 复制代码
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile 
Fatal error compiling: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport 
does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

原因分析:

这是一个非常经典的Lombok 版本与 JDK 版本不兼容报错。

  • 苍穹外卖项目默认适配 JDK 11
  • IDEA 当前编译环境实际调用的是系统安装的 JDK 21
  • 项目中原有的 Lombok 版本较低,无法识别 JDK 21 内部 API 的变更,导致注解处理器崩溃。

解决方案:

  1. 前往 Eclipse Adoptium 官网下载 JDK11
  2. 在 IDEA 的 文件 > 项目结构 > SDK 中手动添加 JDK 11 的安装目录。

3. 在 文件 > 设置 > 构建、执行、部署 > 构建工具 > Maven > 运行程序 中,将 JRE 明确切换为 JDK 11。

  1. 重启IDEA

四、编译成功后的残留提示分析

经过上述配置,项目终于编译成功,控制台输出 BUILD SUCCESS

但在运行日志开头,依然看到一行提示:

这串红色的代码并不是什么报错,不影响项目编译与运行,也不会导致乱码。 看到 BUILD SUCCESS 即代表环境已完美搭建完成,无需额外处理。


五、经验总结

  1. Maven 仓库路径避坑 :无论何时,Maven 的本地仓库路径(settings.xml 中的 localRepository绝对不要包含中文、空格或特殊符号,否则极易引发莫名其妙的读取失败。
  2. Lombok 与 JDK 版本强相关 :如果项目报出 JCTree qualid 之类的错误,首先排查 JDK 版本是否过高。最佳实践是严格按照项目要求的 JDK 版本配置编译环境。
  3. IDEA 内置行为的辨别 :遇到 JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK 这类无法修改的提示时,不必钻牛角尖。只要代码编译通过、运行日志无乱码,即可判定为 IDE 的"伪报错",安心写业务逻辑即可。

本次环境搭建耗时约 30 分钟,通过针对性降级 JDK 版本、手动指定编译 JRE 成功解决了苍穹外卖项目的启动问题。

相关推荐
Java 码思客10 小时前
【Spring AI实战】第2章 大模型基础调用:同步/异步/流式输出
java·人工智能·spring·ai
郝学胜-神的一滴10 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建
洛阳泰山10 小时前
MaxKB4j 近三月开发进展速览:从 RAG 引擎到全能 AI 工作流平台
人工智能·后端
欧米欧10 小时前
C++进阶之AVL树
java·服务器·c++
i220818 Faiz Ul10 小时前
理财系统|基于java+vue的家庭理财系统小程序(源码+数据库+文档)
java·vue.js·spring boot·小程序·论文·毕设·理财系统
鹏北海-RemHusband10 小时前
Go 语言基础笔记 — 面向 JS/TS 前端开发者
笔记·golang
深念Y10 小时前
DeepSeek/MiMo 推理链缓存代理:从内存到 SQLite 的两级缓存架构实战
数据库·缓存·架构·sqlite·内存·优化·分层
Mahir0810 小时前
MyBatis 分页与插件深度解密:从插件机制到三大分页方案原理全解
java·后端·mybatis·mybatis-plus·大厂面试题
heimeiyingwang10 小时前
【架构实战】分布式ID生成方案:雪花算法与业务ID设计
分布式·算法·架构