您好,登錄后才能下訂單哦!
Part 1:原因在于我們參數的差異:
情況1 :mvn clean install -Dmaven.test.skip=true
這種情況,即不編譯測試類文件,也不執行測試類文件
情況2:mvn clean install –Dmaven.test.skip.exec=true
這種情況,編譯測試類文件成字節碼文件,但是不執行字節碼文件
由于以前大家都沒寫單元測試,所以沒問題,現在有單元測試進來了,于是問題來了。
----分界線----
第一種情況下,(也就是出錯的情況),我們maven3(基于JDK 1.6) 不編譯這些,所以一直運行到build successful ,沒問題。
然后。。(關鍵來了)執行sonar,因為我們Jenkins版本非常低,只能接受sonar2.0,而sonar 2.0(基于JDK 1.5)在執行生命周期時 maven-compiler-plugin:2.3.2:testCompile時候,他發現沒有編譯那些類,所以他用jdk 1.5編譯測試類,而我們源代碼是1.6的源碼,他沒能力編譯這些,所以編譯不通過。
第二種情況, 我們maven3(基于JDK 1.6) 編譯這些類,所以在target目錄下生成了 1.6版本的字節碼,但是不運行他們。一切都很順利,然后到了sonar了,同樣會調用compiler-plugin:2.3.2:testCompile ,(關鍵來了),此時他比較一下時間戳,發現是已經有最新的字節碼了(剛maven3 使用JDK 1.6來編譯的),所以,他就跳過了testCompile階段,所以沒問題了。
Part 2:解決辦法
一個辦法就是把參數弄成Dmaven.test.skip.exec ,但這不是最好的方法
最好的方法是,讓sonar的source version 和target version都設置為1.6,而不是默認的1.5
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。