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

1.背景

使用代碼分析工具PMD檢查Android Java代碼缺陷者春,本文是個整理捌刮。

介紹

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

  • 作為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 先了解使用手冊

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í)行檢測的命令行格式

   ./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

查看報告

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

image.png

4. 參考

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市括改,隨后出現(xiàn)的幾起案子腻豌,更是在濱河造成了極大的恐慌,老刑警劉巖嘱能,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吝梅,死亡現(xiàn)場離奇詭異,居然都是意外死亡惹骂,警方通過查閱死者的電腦和手機(jī)苏携,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來对粪,“玉大人右冻,你說我怎么就攤上這事●媒模” “怎么了国旷?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茫死。 經(jīng)常有香客問我跪但,道長,這世上最難降的妖魔是什么峦萎? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任屡久,我火速辦了婚禮,結(jié)果婚禮上爱榔,老公的妹妹穿的比我還像新娘被环。我一直安慰自己,他們只是感情好详幽,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布筛欢。 她就那樣靜靜地躺著,像睡著了一般唇聘。 火紅的嫁衣襯著肌膚如雪版姑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天迟郎,我揣著相機(jī)與錄音剥险,去河邊找鬼。 笑死宪肖,一個胖子當(dāng)著我的面吹牛表制,可吹牛的內(nèi)容都是我干的健爬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼么介,長吁一口氣:“原來是場噩夢啊……” “哼娜遵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夭拌,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魔熏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸽扁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡镶骗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年桶现,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼎姊。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骡和,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出相寇,到底是詐尸還是另有隱情慰于,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布唤衫,位于F島的核電站婆赠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏佳励。R本人自食惡果不足惜休里,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赃承。 院中可真熱鬧妙黍,春花似錦、人聲如沸瞧剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抓于。三九已至做粤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毡咏,已是汗流浹背驮宴。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留呕缭,地道東北人堵泽。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓修己,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迎罗。 傳聞我的和親對象是個殘疾皇子睬愤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

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