如何在jenkins的maven項目中,用mvn命令行指定findbugs的黑名單規則文件


一:問題背景

最近在研究jenkins的過程中,針對maven項目,打算添加findbugs進行靜態檢查,但我不太想在項目的pom中進行修改,最好可以只修改jenkins的job配置,即配置外部化。

 

我發現:在jenkins安裝了findbugs插件后,只需要按照如下配置:

1.配置maven的goal

2.配置構建后發布Findbugs分析結果

 

保存后,點擊立即構建,即可正常生成報告,如下:

3.問題出現

因為我也是看了網上的很多文章,很多都說需要在pom文件里的build和report中配置findbugs插件。

但配置經過我這樣的實測,證明並不需要如此。唯一需要做的就是:如上圖所示,在maven的goal中添加findbugs:findbugs即可。

但是,我們項目組有自己的要求,比如某些findbugs的錯誤不需要檢查那么,我要怎么樣才能指定,哪些錯誤需要檢查,哪些錯誤不需要檢查呢?

 

二:解決方案嘗試

1.普遍做法

 我首先用搜索引擎查找了幾篇,沒找到我想要的,網上的做法都是:

在項目的pom中指定規則文件的位置:

在pom文件的同級,放置excludeFilterFile(該文件中的規則不需要檢查)

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>

                <configuration>
                    <excludeFilterFile>custom-findbugs-include.xml</excludeFilterFile>
                    <!--<threshold>High</threshold>-->
                    <!--<threshold>Low</threshold>-->
                    <effort>Default</effort>
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                    <xmlOutput>true</xmlOutput>
                    <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <xmlOutput>true</xmlOutput>
                    <!-- Optional directoryto put findbugs xdoc xml report -->
                    <!--<xmlOutputDirectory>target/site</xmlOutputDirectory>-->
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

 

經我試驗,這樣是可行的。但是不符合我的需求:我希望pom里面都是干干凈凈的,findbugs只配置在jenkins中,項目不需要進行任何配置

ok。繼續搜索解決方案吧。

2.閱讀插件官網的文檔

Maven的findbugs插件的官網地址:https://gleclaire.github.io/findbugs-maven-plugin/

在這里面,查閱了findbugs:findbugs的文檔,看看有哪些配置參數:

https://gleclaire.github.io/findbugs-maven-plugin/findbugs-mojo.html

此時,有了一點收獲,在可選參數部分,看到如下參數,結合上面第一種解決方案的xml的配置,我幾何可以認定,要找的就是這個參數:excludeFilterFile

 

ok。那么我們應該就它配置到jenkins里面的maven goal中就可以了吧。(我的pom文件和下面的custom-findbugs-include.xml同級,因此不需要指定路徑)

 

然而,當我興沖沖打開findbugs的報告,發現各種bug類型和之前相比,沒有變化。

期間百思不得其解,不明白為什么在pom中指定就可以,在這里指定就不行。

試了很多方法,最后我覺得:或許是這個配置壓根沒生效。

 

3.驗證猜想

生沒生效,這個只能通過maven的debug日志來看了。於是我像上面的圖那樣,打開了debug日志。

-X -e

這一次,在debug日志的輸出中,下圖所示的位置,是空的(截圖我打了碼,因為我找不到之前的日志了。)

於是知道了問題的原因,果然是配置沒生效。

為什么不生效呢,應該是我的配置方式不對。

接下來,我翻遍了baidu、google的前幾頁的結果,依然沒有收獲。查到的幾乎都是傳統方案,也就是在pom中指定。

 

4.問題解決

這期間,查搜索引擎無果,於是又上qq,加了兩個群,提了問題。可是,沒人回答。

這期間,我也順便把這個maven插件的源碼down了下來。導入到idea中,進行全局搜索:

 

終於,讓我發現如下代碼:

    @Parameter( property="findbugs.excludeFilterFile" )
    String excludeFilterFile

對java熟悉的人,應該很容易猜測:

這是個配置項,而key不是我之前猜測的excludeFilterFile,而是findbugs.excludeFilterFile

然后就簡單了,我很愉快地在jenkins中修改了配置:

 

終於,問題得到了解決。

 

5.懸而未決的問題

這個excludeFilterFile類似於黑名單,那么白名單行不行呢,我按照源碼:

@Parameter( property="findbugs.includeFilterFile" ) String includeFilterFile

將jenkins配置改成

 

並沒有效果。這一點,打算后邊再查。(當然,對我們組來說,黑名單,已經夠了)

 

三、踩坑感言

其實這個問題,很奇怪,翻遍了搜索引擎都沒結果,難道大家都沒這個需求嗎,不管怎么說,希望能幫助到有需要的人。

抽絲剝繭的過程,其實很快樂。

另外附上我隨便寫的custom-findbugs-include.xml文件(僅供測試用,規則是隨便寫的):

<FindBugsFilter>
    <Match>
        <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
    </Match>

    <Match>
        <Bug pattern="DM_BOXED_PRIMITIVE_FOR_PARSING"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP2"/>
    </Match>

    <Match>
        <Bug pattern="ME_ENUM_FIELD_SETTER"/>
    </Match>
</FindBugsFilter>

 

規則列表:

http://findbugs.sourceforge.net/bugDescriptions.html#BSHIFT_WRONG_ADD_PRIORITY


免責聲明!

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



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