亲宝软件园·资讯

展开

记一次Maven发布Jar包中文乱码解决方法

架构文摘 人气:1
### 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` 试下: ![idea_charset](http://www.javaobj.com/wp-content/uploads/2020/03/捕获-300x222.png) 重新执行: ``` 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`: ``` org.apache.maven.plugins maven-compiler-plugin 8 8 utf-8 ``` ### 总结 问题的产生是由于公司平台用的Mac电脑并且系统使用的字符集是UTF-8,切换到Windows后由于默认的字符集是GBK,而且没有指定`maven-compiler-plugin`插件的编码,导致编译出来的字节码文件中的中文乱码了。 > 来源:http://www.javaobj.com/

加载全部内容

相关教程
猜你喜欢
用户评论