当前位置: 首页 > news >正文

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:execon project ruoyi-modules-syste

一、报错现象

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:exec on project ruoyi-modules-system: Command execution failed. Process exited with an error: 1

Maven 只是执行器,真正的问题在 Spring Boot 启动阶段。应用没起来,Maven 才以退出码 1 结束。


二、两类最容易误导的日志

误导点 1:dynamic-datasource initial loaded [0/1] datasource

这条日志是判断 Nacos 配置是否生效的关键指标,应优先看:

日志内容

含义

下一步

loaded [0] datasource

Nacos 里数据源配置没加载进来

查 Nacos 连通性、YAML 解析、编码问题

loaded [1] datasource, primary named [master]

数据源配置已生效

数据源问题可排除,转查 MyBatis / 业务配置

分析思维:

看到 MyBatis / Mapper 报错 ↓ 先往回看数据源日志(不要直接改 Mapper) ↓ [0] datasource → 根因在 Nacos 配置未注入(编码、YAML、Data ID) [1] datasource → Nacos 基础配置已 OK,再查 MyBatis 专属配置

典型陷阱:看到[1] datasource就认为「全都好了」,但MyBatis 的mapper-locationstype-aliases-package与数据源在同一份 Nacos YAML 里。若之前是[0]阶段,修复编码后变成[1],说明 Nacos 已能解析;若 MyBatis 仍报错,再单独核对别名、包路径,不要回头怀疑 Mapper 接口或 XML 写错


误导点 2:Invalid bound statement: com.ruoyi.system.mapper.SysConfigMapper.selectConfigList

这类报错非常像代码问题,容易让人去改 Mapper,实际上经常是配置未加载的连锁反应

Nacos YAML 解析失败(UTF-8/GBK) ↓ mybatis.mapper-locations 未生效 ↓ Mapper 接口能扫描到(@MapperScan 仍工作) Mapper XML 没被加载进 SqlSessionFactory ↓ 调用 selectConfigList() 时报: Invalid bound statement (not found): ...SysConfigMapper.selectConfigList

为什么容易误判:

表象

容易得出的错误结论

实际情况

接口里有selectConfigList

方法名写错

方法名没问题

XML 里有对应<select id="selectConfigList">

XML 路径或 id 写错

XML 本身没问题

target/classes/mapper/.../SysConfigMapper.xml存在

编译/打包问题

资源已在 classpath

报错指向具体 Mapper 方法

要改 Java/XML

根因是 MyBatis 没扫到 XML

正确排查顺序:

  1. dynamic-datasource[0]还是[1]
  2. 看有没有MalformedInputException/YAMLException
  3. 确认 Nacos 里mybatis.mapper-locations是否生效
  4. 最后才核对 Mapper 接口与 XML(通常无需改代码)

中间还出现过Could not resolve type alias 'SysDept',属于同一链条:type-aliases-package配错(如只写com.ruoyi.system.domain),与selectConfigList找不到是同类配置问题,不是实体类缺失。


三、完整排查思维链路

Maven BUILD FAILURE ↓ 看 Spring 启动日志(不看 Maven 本身) ↓ ┌─ dynamic-datasource loaded [0] ? │ ↓ 是 │ Nacos 配置未生效 → 查 YAMLException / 编码 / Data ID │ ↓ │ 连锁:无数据源 + 无 mapper-locations │ ↓ │ 误导性报错:SysConfigMapper.selectConfigList not found │ └─ dynamic-datasource loaded [1] ? ↓ 是 数据源 OK,继续看 MyBatis ↓ SysDept / selectConfigList 等报错 ↓ 查 type-aliases-package、mapper-locations(仍在 Nacos 同一份配置里) ↓ 一般不用改 Mapper 代码

四、根因说明

1. Nacos 配置依赖

本地bootstrap.yml只负责连 Nacos,业务配置在远程:

配置项

作用

spring.datasource.dynamic

数据源(决定[0]还是[1]

mybatis.mapper-locations

决定 XML 是否加载(影响selectConfigList等)

mybatis.type-aliases-package

决定SysDept等别名(应用com.ruoyi.system

spring.cloud.gateway.routes

网关路由(影响/auth/login404)

任意环节解析失败,都会引发下游「像代码错了」的报错。

2. UTF-8 编码问题

  • Windows 默认常为GBK
  • Nacos 配置含中文注释(如# spring配置# 认证中心
  • 解析触发MalformedInputException整份 YAML 失效
  • 表现为[0] datasource+ 各类 MyBatis BindingException

3. 网关 404 同一性质

/auth/login返回 404 且 auth 无日志 →ruoyi-gateway-dev.yml路由未加载,与 system 模块是同一类 Nacos 编码问题


五、解决方案

方案 A:JVM 强制 UTF-8

各服务 VM options 添加:

-Dfile.encoding=UTF-8

方案 B:Nacos 配置去除中文

*-dev.yml删除中文注释,关键项示例:

mybatis: type-aliases-package: com.ruoyi.system mapper-locations: classpath*:mapper/**/*.xml

方案 C:IDE 编码统一

File Encodings全部UTF-8

方案 D:命名空间

未配namespacepublic,无需额外选择;保证 Data ID 为{application.name}-dev.yml即可。


六、验证清单

  • MalformedInputException
  • dynamic-datasource initial loaded [1] datasource(不是[0]
  • Invalid bound statement: ...SysConfigMapper.selectConfigList
  • Could not resolve type alias 'SysDept'
  • 网关/auth/login能打到 auth 服务

七、经验总结

要点

说明

[0]vs[1] datasource是分水岭

[0]先修 Nacos;[1]再查 MyBatis 细项

Mapper 报错常是烟雾弹

selectConfigList not found多因mapper-locations未加载,不是接口/XML 写错

同一份 Nacos YAML 管多条线

数据源、MyBatis、路由一起失效或一起恢复

Windows 开发必盯编码

中文注释 + GBK 是若依微服务常见坑

一句话:先用dynamic-datasource loaded [0/1]判断 Nacos 是否生效;SysConfigMapper.selectConfigList等 MyBatis 报错往往是配置未加载的结果而非原因;根因是Nacos 配置因 UTF-8/GBK 不一致解析失败

http://www.cnnetsun.cn/news/3268141.html

相关文章:

  • 告别尴尬!5分钟掌握Windows防休眠终极方案
  • CI/CD 集成教程:如何在 GitHub Actions 中使用 @hapi/lab
  • CharacterPickerView与Android原生选择器对比:哪个更适合你的项目?
  • 如何使用SwiftTrace快速实现Swift与Objective-C方法调用追踪
  • CharacterPickerView常见问题解决:10个开发者必须知道的Bug修复
  • Obsidian Homepage:打造你的专属知识管理中心,告别千篇一律的启动界面
  • STM32F429与AD7490高精度数据采集系统设计
  • RuleBook实战案例:多申请人房贷利率计算规则设计与实现
  • 如何快速查询手机号关联QQ号:phone2qq完整使用指南
  • Steam成就管理器终极指南:5分钟掌握免费成就修改技巧
  • 音频001_Android+Linux车载/手机音频全链路分层架构图
  • 可视化供应链:定位技术驱动的智慧物流革命
  • Anthropic又叒发现AI意识了,这次要读写Claude的前额叶刚刚
  • VIA键盘定义库中的灯光系统配置:支持RGB、背光和单色LED
  • SEO-friendly URL 网址 结构:链接越短排名越好?90%的人想错了
  • Python编程中pygame库中照片的处理
  • makin项目深度解析:通过API挂钩技术检测恶意软件的15种反调试技巧
  • Meta Muse Image技术解析:AI图像生成在广告创意与平台集成的应用
  • Seq2SeqAutoencoder实战:用PyTorch实现序列自编码器的完整教程
  • 【计算机大数据毕业设计案例】基于 Python 的热门技术岗位薪资统计系统的设计与实现 基于 Python 的程序员薪资数据清洗与可视化系统(程序+文档+讲解+定制)
  • 一机多玩:Nucleus Co-op如何让单机游戏变身多人派对
  • 为什么选择sing-app-vue-dashboard?Vue 3+Bootstrap 5构建现代管理系统的5大优势
  • 企业微信二次开发:业务系统向外部群主动推送消息
  • CY7-OH 提纯方法详解:重结晶与柱层析操作技巧与优化方案
  • libgdbm-rust:革命性Rust重写GDBM数据库管理器,彻底解决内存安全问题
  • 告别风扇噪音!FanControl让你彻底掌控电脑散热系统
  • 终极指南:如何在Windows系统上解锁MacBook Pro Touch Bar完整显示功能
  • git-sh安装与配置教程:5分钟快速开始Git高效开发
  • 抖音音频批量下载终极指南:开源工具实现高效音乐素材收集
  • 嵌入式音频系统设计:TS2007FC与TM4C1299NCZAD实战解析