使用代碼分析工具PMD檢查Android Java代碼缺陷

1.背景

使用代碼分析工具PMD檢查Android Java代碼缺陷,本文是個(gè)整理。

介紹

PMD是一個(gè)靜態(tài)源代碼分析器。它找到常見的編程缺陷,如未使用的變量,空的catch塊,不必要的對(duì)象創(chuàng)建等等。它主要關(guān)注Java和Apex,但支持其他六種語(yǔ)言。
PMD具有許多內(nèi)置檢查(在PMD術(shù)語(yǔ),規(guī)則中),這些檢查在規(guī)則參考中針對(duì)每種語(yǔ)言進(jìn)行了記錄。我們還支持廣泛的API來(lái)編寫您自己的規(guī)則,您可以使用Java或作為自包含的XPath查詢來(lái)執(zhí)行。
在集成到構(gòu)建過(guò)程中時(shí),PMD最有用。然后,它可以用作質(zhì)量門,以強(qiáng)制執(zhí)行代碼庫(kù)的編碼標(biāo)準(zhǔn)。除其他外,PMD可以運(yùn)行:

  • 作為Maven的目標(biāo)
  • 作為Ant任務(wù)
  • 作為Gradle任務(wù)
  • 從命令行

官網(wǎng)地址
https://pmd.github.io/pmd/index.html

命令行方式使用 PMD 的Demo
https://github.com/vir56k/demo/tree/master/pmd/%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%96%B9%E5%BC%8F%E4%BD%BF%E7%94%A8pmd

Gradle 方式使用 PMD 的Demo
https://github.com/vir56k/demo/tree/master/pmd/UsePMDByGradle

2.命令行方式使用 PMD

2.1 先了解使用手冊(cè)

https://pmd.github.io/pmd/pmd_userdocs_installation.html#how-to-install-pmd-and-cpd

2.2 下載

前往官網(wǎng),下載 壓縮包,解壓
下載地址
https://github.com/pmd/pmd/releases

2.3 執(zhí)行檢測(cè)的命令行格式

   ./run.sh pmd -d ../../../src/main/java/ -f text -R rulesets/java/basic.xml

2.4 我的腳本

    # 準(zhǔn)備環(huán)境信息
    CUR=`PWD`
    echo 當(dāng)前工作目錄:${CUR}
    basepath=$(cd `dirname $0`; pwd)
    echo 當(dāng)前執(zhí)行的腳本文件的父目錄:${basepath}
    PMD_HOME=$basepath/pmd-bin-6.12.0
    echo PMD_HOME:${PMD_HOME}
    PROJ_DIR=$(cd ${basepath}; cd ../../; pwd)
    echo PROJ_DIR:${PROJ_DIR}


    SRC=${PROJ_DIR}/app/src/main/java
    FORMAT=html
    RULE=rulesets/java/basic.xml

    ${PMD_HOME}/bin/run.sh pmd -d ${SRC} -f ${FORMAT} -R ${RULE}

3.Gradle 方式使用 PMD

3.1 引用插件

apply plugin: 'pmd'

3.2 編寫task

def configDir = "${project.rootDir}/scripts"
def reportsDir = "${project.buildDir}/reports"

  task pmd(type: Pmd) {
      ignoreFailures = true
      ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml")
      ruleSets = []

      source 'src'
      include '**/*.java'
      exclude '**/gen/**'

      reports {
          xml.enabled = false
          html.enabled = true
          xml {
              destination "$reportsDir/pmd/pmd.xml"
          }
          html {
              destination "$reportsDir/pmd/pmd.html"
          }
      }
  }

3.3 關(guān)聯(lián)到 check task

check.dependsOn 'pmd'

3.4 執(zhí)行 check

./gradlew check

查看報(bào)告

位于:build/reports/pmd 文件夾下

image.png

4. 參考

https://pmd.github.io/pmd/index.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選自:https://www.wolfcstech.com/2018/04/03/jenkins_deployme...
    晚云落閱讀 2,609評(píng)論 1 2
  • 猜想runloop內(nèi)部是如何實(shí)現(xiàn)的?一般來(lái)講,一個(gè)線程一次只能執(zhí)行一個(gè)任務(wù),執(zhí)行完成后線程就會(huì)退出。如果我們需要一...
    筆筆請(qǐng)求閱讀 481評(píng)論 0 0
  • 夜色仍然深沉,不知哪一處雞舍的公雞扯了一嗓子,“咯咯喔——喔”,小村里幾家窗戶就晃悠悠地亮起了幾盞半睜眼的燈。 月...
    親愛的佩德羅閱讀 800評(píng)論 2 7
  • 《六項(xiàng)精進(jìn)》打卡第122天 姓名:閔慧賢 公司:上海晉名實(shí)業(yè)有限公司 組別:謙虛三組 【知~學(xué)習(xí)】 背誦《六項(xiàng)精進(jìn)...
    閔慧賢閱讀 92評(píng)論 0 0
  • 在當(dāng)下快節(jié)奏的互聯(lián)網(wǎng)時(shí)代,跟陌生人打交道快速的建立信賴感!首先你要在相互的交談中看他們的需求點(diǎn),找到同頻的點(diǎn),多站...
    康雅姐姐閱讀 1,499評(píng)論 0 0

友情鏈接更多精彩內(nèi)容