Maven發(fā)布Jar包中文亂碼解決方法
Maven deploy 亂碼
今天使用Maven發(fā)布Jar包時(shí),發(fā)布功能都是正常的也成功上傳到了倉(cāng)庫(kù),就是項(xiàng)目跑越來(lái)后出中文中現(xiàn)了亂碼:
{ "code": "SUCCESS", "success": true, "message": "鎿嶄綔鎴愬姛", "data": [ { "key": "app_force_login", "value": "false" } ] }
之前一直在用的mac開(kāi)發(fā),一直也沒(méi)碰到過(guò)這樣的問(wèn)題。后來(lái)?yè)Q了家里的 Windows 臺(tái)式機(jī)代碼拉下來(lái)后,使用maven deploy
發(fā)布了一次common
的Jar包,然后所有common
包中的中文都亂碼了,一開(kāi)始還以為是服務(wù)器環(huán)境的問(wèn)題,后來(lái)發(fā)現(xiàn)在執(zhí)行maven deploy
時(shí)輸出了一些警告:
[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的不可映射字符
打開(kāi)源碼一看又是正常的中文
修改 Idea 的編碼
首先看了一下 Idea的文件編碼是不是 UTF-8
,發(fā)現(xiàn)在 Windows 環(huán)境下項(xiàng)目中的編碼是繼承系統(tǒng)的 GBK
,全部修改成 UTF-8
試下:
重新執(zhí)行:
mvn clean deploy -DskipTests
還是樣的出現(xiàn)亂碼警告!!然后查看對(duì)應(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); } }
猜想可能是某種字符編碼對(duì)應(yīng)不上。
修改 Maven 編譯插件編碼
修改文件/idea的編碼后,還是一樣亂碼。我仔細(xì)查看了下mvn發(fā)布日志發(fā)現(xiàn)了些有用的信息:
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
大概意思就是沒(méi)有設(shè)置文件編碼,使用系統(tǒng)默認(rèn)的編碼 GBK
,根據(jù)指示找到項(xiàng)目的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é)
問(wèn)題的產(chǎn)生是由于公司平臺(tái)用的Mac電腦并且系統(tǒng)使用的字符集是UTF-8,切換到Windows后由于默認(rèn)的字符集是GBK,而且沒(méi)有指定maven-compiler-plugin
插件的編碼,導(dǎo)致編譯出來(lái)的字節(jié)碼文件中的中文亂碼了。
以上就是Maven發(fā)布Jar包中文亂碼解決方法的詳細(xì)內(nèi)容,更多關(guān)于Maven發(fā)布Jar包中文亂碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java基本教程之java線程等待與java喚醒線程 java多線程教程
這篇文章主要介紹了對(duì)線程等待/喚醒方法,文中使用了多個(gè)示例,大家參考使用吧2014-01-01基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳
這篇文章主要介紹了基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java并發(fā)編程之Condition源碼分析(推薦)
這篇文章主要介紹了Java并發(fā)編程之Condition源碼分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Java并發(fā)編程深入理解之Synchronized的使用及底層原理詳解 下
在并發(fā)編程中存在線程安全問(wèn)題,主要原因有:1.存在共享數(shù)據(jù) 2.多線程共同操作共享數(shù)據(jù)。關(guān)鍵字synchronized可以保證在同一時(shí)刻,只有一個(gè)線程可以執(zhí)行某個(gè)方法或某個(gè)代碼塊,同時(shí)synchronized可以保證一個(gè)線程的變化可見(jiàn)(可見(jiàn)性),即可以代替volatile2021-09-09java比較兩個(gè)json文件的差異及說(shuō)明
這篇文章主要介紹了java比較兩個(gè)json文件的差異及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10