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

Maven 设置项目编码,防止编译打包出现编码错误

Maven 设置项目编码,防止编译打包出现编码错误

作者说明: 本文通过实际示例演示如何在 Maven 项目中正确设置编码,
避免中文源码或注释在编译、打包、测试时出现乱码或“不可映射字符”错误。

说明: 以下内容仅用于技术分享,如有侵权请联系删除。


🧩 一、为什么要设置编码

Java 源文件本身是文本文件,字符编码(如 UTF-8、GBK)决定了其中字符的存储方式。
如果源文件的实际编码与编译器使用的编码不一致,就会在编译时出现错误或乱码。

最常见的错误信息是:

编码GBK的不可映射字符

这通常意味着:源码是 UTF-8 保存的,而 Maven 编译器却用 GBK 去解码。


⚙️ 二、正确的编码配置(推荐 UTF-8)

pom.xml 中,通过 <properties><build> 标签指定项目的统一编码:

<properties><!-- 指定源代码使用的 Java 版本 --><maven.compiler.source>8</maven.compiler.source><!-- 指定生成的字节码目标版本 --><maven.compiler.target>8</maven.compiler.target><!--设置项目编译的字符编码为UTF-8--> <maven.compiler.encoding>UTF-8</maven.compiler.encoding><!-- 设置项目源码的字符编码为 UTF-8 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 报告输出文件使用的编码(Maven 生成的站点、报告) --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

💡 说明:

  • <project.build.sourceEncoding>:控制编译时源码读取的编码。
  • <project.reporting.outputEncoding>:控制 Maven 生成报告文件的编码。
  • <encoding>maven-compiler-plugin 插件自身的编码设置。

🧠 三、验证 UTF-8 配置是否生效

1️⃣ 示例源码(UTF-8 编码)

文件:src/test/java/CodeTest.java

import org.junit.Test;public class CodeTest {@Testpublic void test() {System.out.println("你好");}
}

2️⃣ 编译与运行

PS D:\live\projects\IDEA\JDBC> mvn compile
PS D:\live\projects\IDEA\JDBC> mvn test -Dtest=CodeTest#test
-------------------------------------------------------T E S T S
-------------------------------------------------------
Running CodeTest
你好
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec

✅ 可以看到测试输出正常显示中文“你好”,说明编码配置正确。


🚫 四、错误示例(编码不一致:GBK)

如果我们错误地将项目的编码改为 GBK:

<properties><!-- 指定源代码使用的 Java 版本 --><maven.compiler.source>8</maven.compiler.source><!-- 指定生成的字节码目标版本 --><maven.compiler.target>8</maven.compiler.target><!--设置项目编译的字符编码为UTF-8--> <maven.compiler.encoding>UTF-8</maven.compiler.encoding><!-- 设置项目源码的字符编码为 UTF-8 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 报告输出文件使用的编码(Maven 生成的站点、报告) --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

然后重新编译:

PS D:\live\projects\IDEA\JDBC> mvn clean
PS D:\live\projects\IDEA\JDBC> mvn compile

输出:

[WARNING] 编码GBK的不可映射字符

继续运行测试:

PS D:\live\projects\IDEA\JDBC> mvn test -Dtest=CodeTest#test

报错如下:

[ERROR] /src/test/java/MybatisDemoTest.java:[17,17] 编码GBK的不可映射字符
[ERROR] /src/test/java/MybatisDemoTest.java:[43,56] 对于User(...), 找不到合适的构造器

📘 原因分析:
当源码实际是 UTF-8 编码,而 Maven 编译器认为是 GBK 时,
在编译阶段解码失败,部分字符损坏,
导致中文注释、变量名或字符串常量被错误解析,最终引发“不可映射字符”甚至“构造器签名不匹配”的编译错误。


🧩 五、关于 <project.reporting.outputEncoding>

该属性只影响 Maven 生成报告文件(如 site、plugin 报告) 的编码。
不会影响源码编译或程序运行。
建议统一设置为 UTF-8,保持整个项目的字符集一致性。


🧭 六、总结

场景推荐设置
源码文件编码UTF-8
Maven 编译器编码<encoding>UTF-8</encoding>
报告输出编码<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
操作系统或 IDE 字符集保持一致(UTF-8)

总结一句话:

Maven 编译时的字符编码必须与源码文件的实际编码一致。
推荐在 pom.xml 中统一使用 UTF-8,以确保跨平台构建和测试过程无乱码问题。


📚 附:常见 Maven 编码相关属性

属性名作用是否必须
project.build.sourceEncoding编译源码时使用的编码✅ 推荐设置
maven.compiler.encoding编译插件使用的编码参数✅ 可选
project.reporting.outputEncodingMaven 报告输出文件编码✅ 推荐设置
maven.compiler.source / targetJava 源与目标版本✅ 必须设置
http://www.dtcms.com/a/474121.html

相关文章:

  • 【Linux】文件系统之缓冲区
  • 【检索:数据库】6、B+树数据库索引全解析:如何为海量磁盘数据构建毫秒级检索系统
  • 创意设计公司网站dede一键更新网站出错
  • 使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
  • 基于Spring Boot + Vue 3的乡村振兴综合服务平台性能优化与扩展实践
  • 基于单片机的声光控制楼道灯(论文+源码)
  • 网站运营分析云平台网站建设方案
  • 【Linux】进程间同步与互斥(下)
  • 现成的手机网站做APP手机网站开发教程pdf
  • 【栈】5. 验证栈序列(medium)
  • Leetcode之 Hot 100
  • 建立能网上交易的网站多少钱wordpress调取多个分类文章
  • MySQL 索引:原理、分类与操作指南
  • Blender机箱盒体门窗铰链生成器资产预设 Hingegenious
  • 网站托管就业做美食有哪些网站
  • 神经符号AI的深度探索:从原理到实践的全景指南
  • 零食网站建设规划书建行输了三次密码卡锁怎么解
  • Python代码示例
  • 济南市历下区建设局官方网站wordpress高级套餐
  • ALLEGRO X APD版图单独显示某一网络的方法
  • 计算机网络基础篇——如何学习计算机网络?
  • 电子商务网站建设的总体设计wordpress dux主题5.0版本
  • 《jEasyUI 创建简单的菜单》
  • AI【前端浅学】
  • 怎么设置网站名称失眠先生 wordpress
  • 低空物流+韧性供应链:技术架构与企业级落地的开发实践指南
  • Quartus II软件安装步骤(附安装包)Quartus II 18超详细下载安装教程
  • 动规——棋圣匹配
  • 侵入别人的网站怎么做我的家乡网页制作步骤
  • Thonny(Python IDE)下载和安装教程(附安装包)