Pengenalan PMD

1. Gambaran keseluruhan

Secara sederhana, PMD adalah penganalisis kod sumber untuk mencari kelemahan pengaturcaraan biasa seperti pemboleh ubah yang tidak digunakan, blok tangkapan kosong, pembuatan objek yang tidak perlu, dan sebagainya.

Ini mendukung Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.

Dalam artikel ini, kita akan memfokuskan pada cara menggunakan PMD untuk melakukan analisis statik dalam proyek Java.

2. Prasyarat

Mari kita mulakan dengan menyiapkan PMD ke dalam projek Maven - menggunakan dan mengkonfigurasi plugin maven-pmd :

 ...    org.apache.maven.plugins maven-pmd-plugin 3.7   /rulesets/java/braces.xml /rulesets/java/naming.xml       

Anda boleh mendapatkan versi terbaru dari maven-pmd-plugin di sini.

Perhatikan bagaimana kita menambahkan set peraturan dalam konfigurasi di sini - ini adalah jalan relatif untuk sudah menentukan peraturan dari pustaka teras PMD.

Akhirnya, sebelum menjalankan semuanya, mari buat kelas Java sederhana dengan beberapa masalah yang mencolok - sesuatu yang PMD dapat mula melaporkan masalah:

public class Ct { public int d(int a, int b) { if (b == 0) return Integer.MAX_VALUE; else return a / b; } } 

3. Jalankan PMD

Dengan konfigurasi PMD yang mudah dan contoh kod - mari buat laporan di folder target build:

mvn site

Laporan yang dihasilkan dipanggil pmd.html dan terletak di folder target / laman web :

Files com/baeldung/pmd/Cnt.java Violation Line Avoid short class names like Cnt 1–10 Avoid using short method names 3 Avoid variables with short names like b 3 Avoid variables with short names like a 3 Avoid using if...else statements without curly braces 5 Avoid using if...else statements without curly braces 7 

Seperti yang anda lihat - kami tidak mendapat hasil. Laporan menunjukkan pelanggaran dan nombor baris dalam kod Java anda, menurut PMD.

4. Peraturan

Plugin PMD menggunakan lima set peraturan lalai:

  • asas.xml
  • kosong.xml
  • imports.xml
  • tidak perlu.xml
  • kod yang tidak digunakan.xml

Anda boleh menggunakan set peraturan lain atau membuat set peraturan anda sendiri, dan mengkonfigurasinya dalam pemalam:

 ...    org.apache.maven.plugins maven-pmd-plugin 3.7   /rulesets/java/braces.xml /rulesets/java/naming.xml /usr/pmd/rulesets/strings.xml //localhost/design.xml       

Perhatikan bahawa kita menggunakan sama ada alamat relatif, alamat mutlak atau bahkan URL - sebagai nilai nilai 'Ruleset' dalam konfigurasi.

Strategi bersih untuk menyesuaikan aturan mana yang akan digunakan untuk sebuah projek adalah dengan menulis file set aturan khusus . Dalam file ini, kita dapat menentukan aturan mana yang akan digunakan, menambahkan aturan khusus, dan menyesuaikan aturan mana yang akan disertakan / dikecualikan dari aturan aturan resmi.

5. Peraturan Peribadi

Mari sekarang pilih peraturan khusus yang ingin kita gunakan dari set peraturan yang ada di PMD - dan mari kita juga menyesuaikannya.

Pertama, kami akan membuat fail ruleset.xml baru . Kita tentu saja dapat menggunakan salah satu file kumpulan aturan yang ada sebagai contoh dan menyalin dan menampalnya ke dalam fail baru kita, menghapus semua peraturan lama dari itu, dan mengubah nama dan keterangannya:

   This ruleset checks my code for bad stuff  

Kedua, mari kita tambahkan beberapa rujukan peraturan:

Atau tambahkan beberapa peraturan khusus:

Kami dapat menyesuaikan pesan dan keutamaan peraturan:

 2  

Anda juga boleh menyesuaikan nilai harta benda peraturan seperti ini:

Perhatikan bahawa anda dapat menyesuaikan peraturan yang dirujuk secara individu. Segala-galanya kecuali kelas peraturan boleh diganti dalam set peraturan tersuai anda.

Seterusnya - anda juga boleh mengecualikan peraturan dari set peraturan:

Seterusnya - anda juga boleh mengecualikan fail dari set peraturan menggunakan corak kecualikan, dengan corak sertakan pilihan tambahan.

Fail akan dikecualikan dari pemprosesan apabila terdapat corak kecualikan yang tidak sepadan, tetapi tidak ada corak termasuk yang sesuai.

Pemisah jalur dalam jalur fail sumber dinormalisasi menjadi watak '/', jadi set peraturan yang sama dapat digunakan pada beberapa platform dengan telus.

Selain itu, teknik mengecualikan / menyertakan ini berfungsi tanpa mengira bagaimana PMD digunakan (contohnya, command line, IDE, Ant), menjadikan penggunaan peraturan PMD anda tetap konsisten di seluruh persekitaran anda.

Inilah contoh ringkas:

  My ruleset .*/some/package/.*  .*/some/other/package/FunkyClassNamePrefix.*  .*/some/package/ButNotThisClass.* ... 

6. Kesimpulannya

Dalam artikel ringkas ini, kami memperkenalkan PMD - alat yang fleksibel dan sangat dapat dikonfigurasi yang berfokus pada analisis statik kod Java

Seperti biasa, kod lengkap yang ditunjukkan dalam tutorial ini terdapat di Github.