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

作者: 架构文摘 | 来源:发表于2020-03-22 09:33 被阅读0次

    来源:javaobj

    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

    重新执行:

    mvn clean deploy -DskipTests
    

    还是样的出现乱码警告!!然后查看对应类ResultCodeclass文件发现里面也是乱码的:

    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插件的编码,导致编译出来的字节码文件中的中文乱码了。

    学习资料分享

    收集准备了 12 套 微服务、Spring Boot、Spring Cloud 核心技术资料,这是部分资料目录:

    • Spring Security 认证与授权
    • Spring Boot 项目实战(中小型互联网公司后台服务架构与运维架构)
    • Spring Boot 项目实战(企业权限管理项目))
    • Spring Cloud 微服务架构项目实战(分布式事务解决方案)
    • Spring Cloud + Spring Boot + Docker 全套视频教程
    • Spring Cloud 网站项目实战(房产销售)
    • Spring Cloud 微服务项目实战(大型电商架构系统)
    • 单点登陆基础到实战
    • Spring Boot 项目实战(企业微信点餐系统)(初级实战)
    • Spring Cloud 互联网应用项目实战(天气预报系统)
    • Spring 源码深度解析 + 注解开发全套视频教程
    • Spring Boot 项目实战(理财产品系统)

    公众号后台回复arch028获取资料::

    image

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/bgrmyhtx.html