Pengantar PMD

1. Ikhtisar

Sederhananya, PMD adalah penganalisis kode sumber untuk menemukan kekurangan pemrograman umum seperti variabel 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.

Pada artikel ini, kami akan fokus pada cara menggunakan PMD untuk melakukan analisis statis dalam proyek Java.

2. Prasyarat

Mari kita mulai dengan mengatur PMD ke dalam proyek Maven - menggunakan dan mengkonfigurasi maven-pmd-plugin :

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

Anda dapat menemukan versi terbaru maven-pmd-plugin di sini.

Perhatikan bagaimana kami menambahkan kumpulan aturan dalam konfigurasi di sini - ini adalah jalur relatif untuk sudah menetapkan aturan dari perpustakaan inti PMD.

Terakhir, sebelum menjalankan semuanya, mari buat kelas Java sederhana dengan beberapa masalah mencolok - sesuatu yang dapat mulai dilaporkan oleh PMD:

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 sederhana dan kode sampel - mari buat laporan di folder target build:

mvn site

Laporan yang dihasilkan disebut pmd.html dan terletak di folder target / situs :

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 mendapatkan hasil. Laporan tersebut menunjukkan pelanggaran dan nomor baris dalam kode Java Anda, menurut PMD.

4. Aturan

Plugin PMD menggunakan lima aturan default:

  • basic.xml
  • empty.xml
  • imports.xml
  • tidak perlu.xml
  • unusedcode.xml

Anda dapat menggunakan kumpulan aturan lain atau membuat kumpulan aturan Anda sendiri, dan mengonfigurasinya di plugin:

 ...    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 bahwa kami menggunakan alamat relatif, alamat absolut, atau bahkan URL - sebagai nilai 'ruleset' dalam konfigurasi.

Strategi bersih untuk menyesuaikan aturan mana yang akan digunakan untuk proyek adalah dengan menulis file kumpulan 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 kumpulan aturan resmi.

5. Kumpulan Aturan Kustom

Sekarang mari kita pilih aturan spesifik yang ingin kita gunakan dari set aturan yang ada di PMD - dan mari kita sesuaikan juga.

Pertama, kita akan membuat file ruleset.xml baru . Kita dapat, tentu saja, menggunakan salah satu file kumpulan aturan yang ada sebagai contoh dan menyalin dan menempelkannya ke file baru kami, menghapus semua aturan lama darinya, dan mengubah nama dan deskripsi:

   This ruleset checks my code for bad stuff  

Kedua, mari tambahkan beberapa referensi aturan:

Atau tambahkan beberapa aturan khusus:

Kami dapat menyesuaikan pesan dan prioritas aturan:

 2  

Dan Anda juga dapat menyesuaikan nilai properti aturan seperti ini:

Perhatikan bahwa Anda dapat menyesuaikan aturan referensi individu. Segala sesuatu kecuali kelas aturan dapat diganti di kumpulan aturan kustom Anda.

Berikutnya - Anda juga dapat mengecualikan aturan dari kumpulan aturan:

Berikutnya - Anda juga dapat mengecualikan file dari kumpulan aturan menggunakan pola pengecualian, dengan pola penyertaan pengganti opsional.

File akan dikeluarkan dari pemrosesan jika ada pola pengecualian yang cocok, tetapi tidak ada pola penyertaan yang cocok.

Pemisah jalur di jalur file sumber dinormalisasi menjadi karakter '/', sehingga kumpulan aturan yang sama dapat digunakan pada beberapa platform secara transparan.

Selain itu, teknik pengecualian / sertakan ini berfungsi terlepas dari bagaimana PMD digunakan (mis. Baris perintah, IDE, Ant), membuatnya lebih mudah untuk menjaga penerapan aturan PMD Anda konsisten di seluruh lingkungan Anda.

Berikut contoh singkatnya:

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

6. Kesimpulan

Dalam artikel singkat ini, kami memperkenalkan PMD - alat yang fleksibel dan sangat dapat dikonfigurasi yang berfokus pada analisis statis kode Java

Seperti biasa, kode lengkap yang disajikan dalam tutorial ini tersedia di Github.