Maven發(fā)布Jar包中文亂碼解決方法
Maven deploy 亂碼
今天使用Maven發(fā)布Jar包時,發(fā)布功能都是正常的也成功上傳到了倉庫,就是項目跑越來后出中文中現(xiàn)了亂碼:
{
"code": "SUCCESS",
"success": true,
"message": "鎿嶄綔鎴愬姛",
"data": [
{
"key": "app_force_login",
"value": "false"
}
]
}
之前一直在用的mac開發(fā),一直也沒碰到過這樣的問題。后來換了家里的 Windows 臺式機代碼拉下來后,使用maven deploy發(fā)布了一次common的Jar包,然后所有common包中的中文都亂碼了,一開始還以為是服務(wù)器環(huán)境的問題,后來發(fā)現(xiàn)在執(zhí)行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,發(fā)現(xiàn)在 Windows 環(huán)境下項目中的編碼是繼承系統(tǒng)的 GBK ,全部修改成 UTF-8 試下:

重新執(zhí)行:
mvn clean deploy -DskipTests
還是樣的出現(xiàn)亂碼警告??!然后查看對應(yīng)類ResultCode的class文件發(fā)現(xiàn)里面也是亂碼的:
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);
}
}
猜想可能是某種字符編碼對應(yīng)不上。
修改 Maven 編譯插件編碼
修改文件/idea的編碼后,還是一樣亂碼。我仔細查看了下mvn發(fā)布日志發(fā)現(xiàn)了些有用的信息:
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
大概意思就是沒有設(shè)置文件編碼,使用系統(tǒng)默認的編碼 GBK,根據(jù)指示找到項目的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>
總結(jié)
問題的產(chǎn)生是由于公司平臺用的Mac電腦并且系統(tǒng)使用的字符集是UTF-8,切換到Windows后由于默認的字符集是GBK,而且沒有指定maven-compiler-plugin插件的編碼,導(dǎo)致編譯出來的字節(jié)碼文件中的中文亂碼了。
以上就是Maven發(fā)布Jar包中文亂碼解決方法的詳細內(nèi)容,更多關(guān)于Maven發(fā)布Jar包中文亂碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JVM入門之類加載與字節(jié)碼技術(shù)(類加載與類的加載器)
Java字節(jié)碼增強指的是在Java字節(jié)碼生成之后,對其進行修改,增強其功能,這種方式相當(dāng)于對應(yīng)用程序的二進制文件進行修改。Java字節(jié)碼增強主要是為了減少冗余代碼,提高性能等2021-06-06
java 遍歷request中的所有表單數(shù)據(jù)的實例代碼
下面小編就為大家?guī)硪黄猨ava 遍歷request中的所有表單數(shù)據(jù)的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案
大數(shù)據(jù)量的List集合,需要把List集合中的數(shù)據(jù)批量插入數(shù)據(jù)庫中,本文給大家介紹Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案,感興趣的朋友跟隨小編一起看看吧2024-04-04
Java多線程和并發(fā)基礎(chǔ)面試題(問答形式)
多線程和并發(fā)問題是Java技術(shù)面試中面試官比較喜歡問的問題之一。在這里,從面試的角度列出了大部分重要的問題,感興趣的小伙伴們可以參考一下2016-06-06

