天天看點

為什麼類中的常量沒有同步過來

集測的時候出現原來的功能不好使的情況(把我急死了);

手機号換綁(接口c)後,查詢個人資訊(接口i),顯示的資訊還是老的手機号.

後來看日志,發現接口c 和接口i 調用的ip不同,但是兩個接口引用的是同一個常量啊?

我就突然想到了修改常量類之後,接口c 沒有重新編譯的問題.

為了确認這點,我找運維,請他把這兩個接口的service  class檔案發給我,我使用jd-gui.exe 反編譯,發現這兩個接口中的ip确實不同.于是我決定找到問題的源頭,我詳細問了運維部署項目的流程.集測部署流程如下:

為什麼類中的常量沒有同步過來

 我就往上追溯到jenkins,于是我就找到負責jenkins 的同僚,讓她把最近一次jenkins部署的相關class檔案發給我,我反編譯,發現ip不對.那麼問題就不在運維,而是在jenkins了.

而且這個同僚把編譯的結果清理之後,重新部署,發給我相同的class,我反編譯之後,發現ip就對了.

是以出問題的環節鎖定在jenkins 了.

于是我讓該同僚檢視jenkins 具體建構代碼,結果發現沒有調用mvn clean

而且我馬上做了一個測試

有兩個類,一個是常量類,一個是測試類

常量類:

為什麼類中的常量沒有同步過來

package test;  

public class constant {  

    public static final string username="黃威";  

}  

 測試類:

為什麼類中的常量沒有同步過來

public class huangwei {  

    private string myname=constant.username;  

    public static void main(string[] args) {  

        system.out.println(constant.username);  

    }  

 編譯之後,反編譯huangwei.class

結果如下:

為什麼類中的常量沒有同步過來

接着我修改constant類,把constant中username的值改為"黃威2222222222222222"

儲存之後,執行maven指令:mvn package

為什麼類中的常量沒有同步過來

maven執行完之後,再次反編譯huangwei.class,仍然是:

為什麼類中的常量沒有同步過來

 根本原因:

因為maven發現huangwei 類沒有修改,是以沒有重新編譯.

但是huangwei 引用的常量修改過了.

解決辦法:添加mvn clean

參考: