Proyek SonarSource ini adalah penganalisa kode untuk proyek Java untuk membantu pengembang menghasilkan kode bersih. Informasi tentang analisis fitur Java tersedia di sini.
Untuk memberikan umpan balik (minta fitur, laporkan bug, dll.) Gunakan Forum Komunitas Sonar. Tolong jangan lupa untuk menentukan bahasa (java!), Versi plugin dan versi sonarqube.
Jika Anda memiliki pertanyaan tentang cara menggunakan plugin (dan dokumen tidak membantu Anda), kami juga mendorong Anda untuk menggunakan Forum Komunitas.
Untuk meminta fitur baru, silakan buat utas baru di Sonarqube Community Forum. Bahkan jika Anda berencana untuk mengimplementasikannya sendiri dan mengirimkannya kembali ke komunitas, silakan mulai utas baru terlebih dahulu untuk memastikan bahwa kami dapat menggunakannya.
Untuk mengirimkan kontribusi, buat permintaan tarik untuk repositori ini. Pastikan Anda mengikuti gaya kode kami dan semua tes lulus (semua cek harus hijau).
Jika Anda memiliki ide untuk aturan tetapi Anda tidak yakin bahwa semua orang membutuhkannya, Anda dapat menerapkan aturan khusus yang tersedia hanya untuk Anda. Perhatikan bahwa untuk membantu Anda, kami sangat menyarankan untuk terlebih dahulu mengikuti tutorial aturan khusus 101 sebelum menyelam langsung ke aturan implementasi dari awal.
Apakah Anda ingin mengerjakan proyek ini penuh waktu? Kami sedang merekrut! Lihat https://www.sonarsource.com/hiring
Untuk menjalankan tes secara lokal mengikuti instruksi ini.
Anda memerlukan Java 22 untuk membangun proyek dan Java 17 menjalankan Tes Integrasi (ITS).
Java 17 dapat digunakan untuk membangun dan menguji semua modul kecuali di bawah java-checks-test-sources yang membutuhkan Java 22 .Java 22 dapat digunakan untuk membangun dan menguji semua modul kecuali di its yang membutuhkan Java 17 karena ketidakcocokan SQ.Untuk membangun plugin dan menjalankan tes unitnya, jalankan perintah ini dari direktori root proyek:
mvn clean install
Menjalankan tes unit dalam IDE mungkin menimbulkan dalam beberapa masalah karena cara proyek dibangun dengan Maven. Jika Anda melihat sesuatu seperti ini:
java.lang.SecurityException: class ... signer information does not match signer information of other classes in the same package
Coba lepaskan sifat Maven dari modul 'JDT'.
Untuk menjalankan tes integrasi, Anda perlu membuat file properti seperti yang ditunjukkan di bawah ini, dan mengatur URL menunjuk ke lokasinya dalam variabel lingkungan bernama ORCHESTRATOR_CONFIG_URL .
# version of SonarQube Server
sonar.runtimeVersion=LATEST_RELEASE
orchestrator.updateCenterUrl=http://update.sonarsource.org/update-center-dev.properties
# The location of the Maven local repository is not automatically guessed. It can also be set with the env variable MAVEN_LOCAL_REPOSITORY.
maven.localRepository=/home/myName/.m2/repository
Dengan misalnya variabel ORCHESTRATOR_CONFIG_URL ditetapkan sebagai:
export ORCHESTRATOR_CONFIG_URL=file:///home/user/workspace/orchestrator.properties
Sebelum menjalankannya, pastikan variabel lingkungan maven_home Anda diatur.
"Tes kewarasan" adalah tes yang menjalankan semua cek terhadap semua file sumber uji tanpa memperhitungkan hasil analisis. Ini memverifikasi bahwa aturan tidak menabrak file apa pun di sumber pengujian kami. Secara default, tes ini dikecualikan dari build. Untuk meluncurkannya:
mvn clean install -P sanity
"Tes plugin" adalah rangkaian uji integrasi yang memverifikasi fitur plugin seperti perhitungan metrik, cakupan, dll. Untuk meluncurkannya:
mvn clean install -Pit-plugin -DcommunityEditionTestsOnly=true
Catatan untuk kontributor internal: Untuk juga menjalankan tes yang bergantung pada edisi Sonarqube Enterprise, gunakan:
mvn clean install -Pit-plugin
"Uji Penguasa" adalah rangkaian uji integrasi yang meluncurkan analisis basis kode besar, menyimpan masalah yang dibuat oleh plugin dalam file laporan, dan kemudian membandingkan hasil tersebut dengan serangkaian masalah yang diharapkan (disimpan sebagai file JSON).
Untuk menjalankan tes, pertama -tama pastikan submodules diperiksa:
git submodule update --init --recursive
Kemudian, pastikan bahwa variabel lingkungan JAVA_HOME diatur untuk eksekusi tes penguasa dan itu menunjuk ke instalasi JDK 17 lokal Anda. Gagal melakukannya akan menghasilkan ketidakkonsistenan dengan hasil yang diharapkan.
Dari foldernya its/ruling , luncurkan tes penguasa:
mvn clean install -Pit-ruling -DcommunityEditionTestsOnly=true
# Alternatively
JAVA_HOME=/my/local/java17/jdk/ mvn clean install -Pit-ruling -DcommunityEditionTestsOnly=true
Catatan untuk kontributor internal: Untuk juga menjalankan tes yang bergantung pada edisi Sonarqube Enterprise, gunakan:
mvn clean install -Pit-ruling
Tes ini memberi Anda kesempatan untuk memeriksa masalah yang dibuat oleh setiap aturan dan memastikan mereka yang Anda harapkan. Setiap aturan yang diterapkan sangat mungkin untuk mengangkat masalah pada beberapa proyek yang kami gunakan sebagai basis kode yang berkuasa.
Untuk aturan yang baru diimplementasikan, ini berarti bahwa bangunan pertama kemungkinan besar akan gagal, disebabkan oleh perbedaan antara hasil yang diharapkan (tanpa nilai apa pun untuk aturan baru) dan hasil baru. Anda dapat memeriksa masalah baru ini dengan mencari file yang dinamai sesuai aturan Anda ( squid-SXXXX.json ) di folder berikut:
/path/to/project/sonar-java/its/ruling/target/actual/...
Untuk aturan yang ada yang dimodifikasi, Anda dapat mengharapkan beberapa perbedaan antara "aktual" (dari analisis baru) dan hasil yang diharapkan. Tinjau dengan cermat perubahan yang ditampilkan dan perbarui sumber daya yang diharapkan sesuai.
Semua file json berisi daftar baris, diindeks oleh file, menjelaskan di mana masalah yang diangkat oleh aturan tertentu berada. Jika/ketika semuanya terlihat bagus untuk Anda, Anda dapat menyalin file dengan masalah aktual yang terletak di:
its/ruling/target/actual/
Ke dalam direktori dengan masalah yang diharapkan:
its/ruling/src/test/resources/
Misalnya menggunakan perintah:
cp its/ruling/target/actual/* its/ruling/src/test/resources/
Tes dalam modul Autoscan dirancang untuk mendeteksi perbedaan antara masalah yang dapat ditemukan oleh penganalisa Java dengan dan tanpa bytecode. Tujuannya di sini adalah untuk menemukan dan memperbaiki FPS potensial, dan memverifikasi FN yang diharapkan antara yang akan muncul dalam analisis otomatis SonarCloud.
Menjalankan tes ini dapat dipecah dalam 2 langkah:
Pastikan bahwa modul java-checks-tests-sources telah dikompilasi (yaitu: file .class di java-checks-tests-sources/target/ mutakhir).
Sebagai keraguan, buka modul java-checks-tests-sources dan jalankan:
# Use java 22!
mvn clean compile Untuk menjalankan tes, pindah ke foldernya its/autoscan dan jalankan:
# cd its/autoscan
# use Java 17!
mvn clean package --batch-mode --errors --show-version
--activate-profiles it-autoscan
-Dsonar.runtimeVersion=LATEST_RELEASE Artefak yang diproduksi selama eksekusi pengujian akan ditemukan di its/autoscan/target/actual . Anda akan ingin membandingkan hasil yang dihasilkan di autoscan-diff-by-rules
Untuk informasi yang lebih rinci, Anda dapat membandingkan perbedaan antara hasil yang ditemukan dengan bytecode dan tanpa bytecode dengan membandingkan dua folder masing -masing:
Bergantung pada hasil yang ditemukan, Anda mungkin perlu memperbarui kebenaran dasar. Hasil yang diharapkan tercantum dalam SRC/Test/Resources.
Anda dapat men -debugnya dengan menambahkan -Dmaven.binary=mvnDebug sebagai opsi saat menjalankan tes. Ini akan menyebabkan penganalisa JVM menunggu debugger dilampirkan sebelum melanjutkan.
Hak Cipta 2012-2024 Sonarsource.
Sonarqube Analyzers dirilis setelah 29 November 2024, termasuk perbaikan tambalan untuk versi sebelumnya, diterbitkan di bawah Sonar Source-Available License Version 1 (SSALV1).
Lihat masing -masing file untuk detail yang menentukan lisensi yang berlaku untuk setiap file. File yang tunduk pada SSALV1 akan dicatat di header mereka.