解決了一個IDA編譯代碼時maven總是自動執行單元測試的問題


​ 眾所周知,idea的maven插件上方,有一個“閃電”樣式的按鈕。網上介紹是:該按鈕保持按下狀態時,編譯代碼時就不會自動執行單元測試。

​ 不過不知道為什么,我們項目編譯時,即使選中這個按鈕,還是會執行單元測試,導致編譯時間非常久。所以之前每次編譯時,需要在終端里面手工執行maven,加上-Dmaven.test.skip=true參數才行。

​ 之前由於項目緊張,就沒仔細思考原因,直到最近項目進度相對理想,有了一些空閑時間,於是開始研究這個問題。

1 首先我在idea設置里面,把maven日志級別改成debug,這樣編譯時就能輸出更多信息

2 通過debug日志分析,我發現選中“閃電”按鈕,idea編譯時,是給代碼增加一個-DskipTests=true的參數。

網上查了一下maven.test.skip跟skipTests兩個參數區別,是這樣說的:

-DskipTests,不執行測試用例,但編譯測試用例類生成相應的class文件至target/test-classes下。

-Dmaven.test.skip=true,不執行測試用例,也不編譯測試用例類。

3 從網上文章上看,加了這兩個參數maven都不會執行單元測試,但實際上在我們項目里面skipTests參數是無效的。

4 於是我猜測,是不是有其它地方配置了skipTests參數,覆蓋了命令行的參數值。

於是全局搜索項目,發現在pom里面有這樣的配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
    </plugins>
</build>

5 猜測是由於這個參數引導起的異常。嘗試把參數刪除,發現“閃電”按鈕現在可以生效了。猜測配置文件里面參數優先級高於命令行的(這優先級跟sptring-boot的不一樣,spring-boot是命令行參數最大)

6 后來又再網上找了一下,找到一篇完整介紹maven單元測試功能的文章,里面有一行說明文字,也映證了我的猜測: “配置skipTests, configuration的配置優先級最高,命令中得配置次之, properties的配置最低”

我這里引用一下原文:

https://www.cnblogs.com/qyf404/p/5013694.html

3.1.3.在執行命令中聲明

在執行maven命令時可以聲明跳過測試用例

qyfmac$ mvn test -Dmaven.test.skip=true

qyfmac$ mvn test -DskipTests=true

3.1.4.跳過測試用例優先級排序

首先分兩種情況,一種是配置skipTests,一種是配置maven.test.skip(真要命,聲明位置就三處了,還搞出兩個變量名,一共就是5種情況).

  • 如果是配置skipTests, configuration的配置優先級最高,命令中得配置次之, properties的配置最低.
  • configuration > 命令 > properties
  • 如果是配置maven.test.skip,命令中得配置優先級最高, properties的配置最低.
    命令 > properties
  • skipTestsmaven.test.skip有一個被設置成了true,則跳過測試用例.
    skipTests||maven.test.skip決定是否跳過測試用例執行.

7 總結一下這個問題解決思路:
a 查看正常與異常日志,對比差異
b 根據差異內容,百度查找相關信息
c 問題修復后,最好將修改還原,看是否能復現問題。(有助於分清故障出現的充分條件和必要條件)


免責聲明!

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



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