Czy istnieje prosty linter Java CLI? [Zamknięte]

86

Próbowałem znaleźć linter Java, który może działać w CLI, który jest niezależny od Eclipse, który mogę wywołać jako przechwycenie zatwierdzenia dla git lub z naszego automatycznego skryptu kompilacji. Czy coś takiego istnieje?

Idealnie byłoby sprawdzić, czy nie ma nieużywanych importów i zmiennych, czy są przestrzegane wytyczne dotyczące stylu, czy wyjątki są używane prawidłowo itp. Chociaż niektóre podzbiory tych funkcji byłyby lepsze niż to, co mamy teraz - nic!

BlueDragonX
źródło
2
//, Czy to nie jest prośba o rekomendację oprogramowania?
Nathan Basanese
3
Nie wiem, czy powinienem zapytać tutaj, czy w meta, ale co jest złego w takich pytaniach, które wymagają rekomendacji? Oczywiście nie ma jednej, obiektywnej odpowiedzi na to pytanie, ale z drugiej strony dotyczy to również wielu pytań technicznych. To pytanie można przeformułować jako „Nie mam aa lintera i nie wiem, które narzędzia są dostępne, aktualne i szeroko stosowane”. Czy to pomogłoby? O wiele bardziej wolałbym znaleźć wyselekcjonowane, rankingowe i datowane pytania / odpowiedzi na StackOverflow niż gdzie indziej. Gdzie powinni iść ludzie z tego rodzaju pytaniami, jeśli nie tutaj?
Kyle Krull

Odpowiedzi:

78
  • SpotBugs (wcześniej Findbugs ) do znajdowania istniejących błędów. BARDZO DOBRZE!
  • PMD do znajdowania wzorców, które mogą prowadzić do błędów (np. Nieużywane zmienne)
  • Checkstyle w celu wymuszenia standardów i konwencji kodowania (np. Spacje, Javadoc)
  • Podatne na błędy przechwytują się bezpośrednio na etapie kompilacji aplikacji

Wszystkie te narzędzia mają pewne nakładające się reguły. Istnieje wiele innych podobnych narzędzi, ale te są najbardziej popularne i obsługiwane.

mikeslattery
źródło
Czy powiedziałbyś, że Findbugs i PMD robią różne rzeczy? Ostatnim razem, gdy się temu przyjrzałem, stwierdziłem, że są na tyle podobne, że potrzebujemy tylko jednego (i wybraliśmy PMD). Uruchomiliśmy również Checkstyle i tak, stwierdziliśmy, że nawet PMD i Checkstyle nakładają się.
Tom Anderson
@TomAnderson - powiedziałbym, że zdecydowanie robią różne rzeczy, tak. jest wartość dla obu z nich (oczywiście jest również nakładanie się).
jtahlborn
Tak, bardzo różne cele. Findbugs próbuje znaleźć RZECZYWISTE błędy, czasami wykonując dogłębną analizę. PMD szuka po prostu wzorców, o których wiadomo, że czasami prowadzą do błędów. Osobiście używam FindBugs i Checkstyle, ponieważ nakładają się mniej.
mikeslattery
warto wspomnieć, że pmd ma 2 różne typy czeków, pmd i cpd.
jtahlborn
4
Findbugs to teraz SpotBugs (na GitHub )
Matruskan
12

Sprawdź także Sonar , który łączy wiele innych narzędzi i zapewnia również ładny widok.

zasady z Checkstyle, FindBugs, PMD, Clirr, fb-contrib.


Nie jestem pewien, jak dodać go do haka po zatwierdzeniu, ale http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven może być dobrym punktem wyjścia (szczególnie jeśli używasz mavena).

Może nawet rozważ użycie jednego z podejść wymienionych na http://docs.codehaus.org/display/SONAR/Continuous+Integration, ponieważ wydaje się, że możesz próbować znaleźć lepsze narzędzia dla całego zespołu („Chociaż niektóre podzbiory te funkcje byłyby lepsze niż to, co mamy teraz - nic! ”

yegeniy
źródło
2
+1 Cztery lata po zadaniu pytania SonarQube wydaje się być bardziej aktywny, nowoczesny i kompletny. Kiedyś łączył wymienione powyżej narzędzia, ale teraz implementuje je natywnie, unikając nakładania się blog.sonarsource.com/…
user2518618
-1

To jest DOKŁADNIE to, nad czym pracuję: narzędzie przyjazne dla CLI, które służy do sprawdzania jakości kodu Java. Posiada również interaktywną modalność. Możesz uruchamiać pojedyncze zapytania (aby sprawdzić pojedyncze ostrzeżenia) lub wszystkie zapytania razem.

Narzędzia są na wczesnym etapie, ale pracuję nad nimi prawie codziennie. Jest dostępny tutaj:

https://github.com/ftomassetti/effectivejava

Daj mi znać, co o tym myślisz i nie krępuj się zadawać pytań.

Federico Tomassetti
źródło
3
Ostatnie zobowiązanie tego projektu miało miejsce 2 lata temu. Nie jestem pewien, czy jest to już aktywnie rozwijane.
Daniel Eagle
Nie, nie jest. Ale potem zacząłem pracować nad JavaParser. Ten projekt nie daje CLI MA, który można by na nim zbudować.
Federico Tomassetti