Apakah ada linter CLI Java sederhana? [Tutup]

88

Saya telah mencoba menemukan linter Java yang mampu berjalan di CLI yang terpisah dari Eclipse yang dapat saya sebut sebagai pengait komit untuk git atau dari skrip build otomatis kami. Apakah hal seperti itu ada?

Idealnya, ia perlu memeriksa impor dan variabel yang tidak digunakan, pedoman gaya itu diikuti, pengecualian digunakan dengan benar, dll. Meskipun beberapa bagian dari fitur tersebut akan lebih baik daripada yang kita miliki sekarang - tidak ada!

BlueDragonX
sumber
2
//, Bukankah ini permintaan untuk rekomendasi perangkat lunak?
Nathan Basanese
3
Saya tidak tahu apakah saya harus bertanya di sini atau di meta, tapi apa salahnya pertanyaan seperti ini yang meminta rekomendasi? Tentu tidak ada jawaban tunggal yang obyektif untuk pertanyaan ini, tetapi sekali lagi itulah yang terjadi pada banyak pertanyaan teknis juga. Pertanyaan ini dapat diutarakan kembali sebagai "Saya tidak memiliki linter dan saya tidak tahu alat mana yang tersedia, terkini, dan banyak digunakan". Apakah itu membantu? Saya lebih suka menemukan Q / A yang dikurasi, diberi peringkat, dan dicatat tanggal di StackOverflow daripada di tempat lain. Kemana orang-orang dengan pertanyaan semacam ini harus pergi, jika tidak ke sini?
Kyle Krull

Jawaban:

81
  • SpotBugs ( Findbugs sebelumnya ) untuk menemukan bug yang ada. BAIK SEKALI!
  • PMD untuk menemukan pola yang dapat menyebabkan bug (misalnya variabel yang tidak digunakan)
  • Gaya centang untuk menegakkan standar dan konvensi pengkodean (mis. Spasi, Javadoc)
  • Error Prone menghubungkan langsung ke langkah kompilasi aplikasi Anda

Semua alat ini memiliki beberapa aturan yang tumpang tindih. Ada banyak alat serupa lainnya, tetapi ini yang paling populer dan didukung.

mikeslattery.dll
sumber
Apakah menurut Anda Findbugs dan PMD melakukan hal yang berbeda? Terakhir kali saya melihat ini, saya menyimpulkan bahwa mereka cukup mirip sehingga kami hanya membutuhkan satu (dan memilih PMD). Kami juga menjalankan Checkstyle, dan ya, menemukan bahwa bahkan PMD dan Checkstyle tumpang tindih.
Tom Anderson
@TomAnderson - saya akan mengatakan mereka pasti melakukan hal yang berbeda, ya. ada nilai untuk keduanya (jelas ada tumpang tindih juga).
jtahlborn
Ya, tujuan yang sangat berbeda. Findbugs mencoba menemukan bug SEBENARNYA, terkadang dengan melakukan analisis mendalam. PMD hanya mencari pola yang diketahui terkadang menyebabkan bug. Secara pribadi, saya menggunakan FindBugs dan Checkstyle karena lebih sedikit tumpang tindih.
mikeslattery
Anda mungkin ingin menyebutkan bahwa pmd memiliki 2 jenis pemeriksaan yang berbeda, pmd dan cpd.
jtahlborn
4
Findbugs sekarang menjadi SpotBugs (di GitHub )
Matruskan
12

Juga, lihat Sonar , yang menggabungkan banyak alat lain dan memberikan tampilan yang bagus juga.

aturan dari Checkstyle, FindBugs, PMD, Clirr, fb-contrib.


Tidak yakin persis bagaimana menambahkannya ke hook pasca-komit, tetapi http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven mungkin merupakan titik awal yang baik (terutama jika Anda menggunakan maven).

Bahkan mungkin mempertimbangkan untuk menggunakan salah satu pendekatan yang tercantum di http://docs.codehaus.org/display/SONAR/Continuous+Integration karena tampaknya Anda mungkin mencoba mencari perkakas yang lebih baik untuk seluruh tim Anda ("Meskipun beberapa subset dari fitur-fitur itu akan lebih baik dari yang kita miliki sekarang - tidak ada! "

yegeniy
sumber
2
+1 Empat tahun setelah pertanyaan diajukan, SonarQube tampaknya lebih aktif, modern, dan lengkap. Dulu menggabungkan alat yang disebutkan di atas, tetapi sekarang menerapkannya secara asli untuk menghindari tumpang tindih blog.sonarsource.com/…
user2518618
-1

Inilah PERSIS yang sedang saya kerjakan: alat yang cocok untuk CLI yang digunakan untuk memeriksa kualitas kode Java. Ia juga memiliki modalitas interaktif. Anda dapat menjalankan kueri tunggal (untuk memeriksa peringatan tunggal) atau semua kueri secara bersamaan.

Alat ini masih dalam tahap awal tetapi saya mengerjakannya hampir setiap hari. Ini tersedia di sini:

https://github.com/ftomassetti/effectivejava

Tolong beritahu saya apa pendapat Anda tentang itu dan jangan ragu untuk mengajukan pertanyaan.

Federico Tomassetti
sumber
3
Komitmen terakhir dari proyek ini adalah 2 tahun lalu. Tidak yakin apakah ini sedang dikembangkan lagi.
Daniel Eagle
Tidak, bukan. Tapi kemudian saya mulai mengerjakan JavaParser. Proyek itu tidak memberi Anda CLI yang bisa dibangun di atasnya.
Federico Tomassetti