记一次Maven发布Jar包中文乱码解决方法
Maven deploy 乱码
今天使用Maven发布Jar包时,发布功能都是正常的也成功上传到了仓库,就是项目跑越来后出中文中现了乱码:
{
"code": "SUCCESS",
"success": true,
"message": "鎿嶄綔鎴愬姛",
"data": [
{
"key": "app_force_login",
"value": "false"
}
]
}
之前一直在用的mac开发,一直也没碰到过这样的问题。后来换了家里的 Windows 台式机代码拉下来后,使用maven deploy
发布了一次common
的Jar包,然后所有common
包中的中文都乱码了,一开始还以为是服务器环境的问题,后来发现在执行maven deploy
时输出了一些警告:
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[10,5] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[10,13] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[10,24] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[18,9] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[18,17] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/convert/ObjectConvert.java:[25,9] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/Result.java:[10,8] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/Result.java:[10,28] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[23,15] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[25,74] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[49,12] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[49,14] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[60,12] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/result/ResultCode.java:[60,14] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/exception/BizRuntimeException.java:[7,11] 编码GBK的不可映射字符
[WARNING] /C:/Users/yjwfn/Desktop/csbaic-common/src/main/java/com/csbaic/common/exception/BizRuntimeException.java:[14,12] 编码GBK的不可映射字符
打开源码一看又是正常的中文
修改 Idea 的编码
首先看了一下 Idea的文件编码是不是 UTF-8
,发现在 Windows 环境下项目中的编码是继承系统的 GBK
,全部修改成 UTF-8
试下:
重新执行:
mvn clean deploy -DskipTests
还是样的出现乱码警告!!然后查看对应类ResultCode
的class
文件发现里面也是乱码的:
public interface ResultCode {
ResultCode SUCCESS = new DefaultResultCode("SUCCESS", "鎿嶄綔鎴愬姛", true);
ResultCode ERROR = new DefaultResultCode("ERROR", "鎿嶄綔澶辫触", false);
ResultCode BAD_REQUEST = new DefaultResultCode("BAD_REQUEST", "璇锋眰閿欒\ue1e4", false);
ResultCode NOT_FOUND = new DefaultResultCode("NOT_FOUND", "璇锋眰鏁版嵁鏈\ue045壘鍒�", false);
String getCode();
String getMessage();
Boolean isSuccess();
static ResultCode error(String code, String message) {
return new DefaultResultCode(code, message, false);
}
static ResultCode ok(String code, String message) {
return new DefaultResultCode(code, message, true);
}
}
猜想可能是某种字符编码对应不上。
修改 Maven 编译插件编码
修改文件/idea的编码后,还是一样乱码。我仔细查看了下mvn发布日志发现了些有用的信息:
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
大概意思就是没有设置文件编码,使用系统默认的编码 GBK
,根据指示找到项目的pom.xml
将插件的编码改为utf-8
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
参考
总结
问题的产生是由于公司平台用的Mac电脑并且系统使用的字符集是UTF-8,切换到Windows后由于默认的字符集是GBK,而且没有指定maven-compiler-plugin
插件的编码,导致编译出来的字节码文件中的中文乱码了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?