記一次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 試下:

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插件的編碼,導致編譯出來的字節碼文件中的中文亂碼了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM