Gibt es einen einfachen CLI Java Linter? [geschlossen]

86

Ich habe versucht, einen Java-Linter zu finden, der auf der von Eclipse getrennten CLI ausgeführt werden kann, die ich als Commit-Hook für Git oder von unserem automatisierten Build-Skript aus aufrufen kann. Gibt es so etwas?

Im Idealfall muss nach nicht verwendeten Importen und Variablen gesucht werden, ob die Stilrichtlinien befolgt werden, Ausnahmen ordnungsgemäß verwendet werden usw. Obwohl eine Teilmenge dieser Funktionen besser wäre als das, was wir jetzt haben - nichts!

BlueDragonX
quelle
2
//, Ist das nicht eine Anfrage für eine Softwareempfehlung?
Nathan Basanese
3
Ich weiß nicht, ob ich hier oder auf Meta fragen soll, aber was ist falsch an solchen Fragen, die nach Empfehlungen fragen? Sicher gibt es keine einheitliche, objektive Antwort auf diese Frage, aber das gilt auch für viele technische Fragen. Diese Frage könnte wie folgt umformuliert werden: "Ich habe keinen Linter und weiß nicht, welche Tools verfügbar, aktuell und weit verbreitet sind." Würde das helfen? Ich würde viel lieber eine kuratierte, bewertete und datumsprotokollierte Frage / Antwort auf StackOverflow finden als irgendwo anders. Wohin sollten Leute mit solchen Fragen gehen, wenn nicht hier?
Kyle Krull

Antworten:

77
  • SpotBugs (frühere Findbugs ) zum Auffinden vorhandener Fehler. SEHR GUT!
  • PMD zum Auffinden von Mustern, die zu Fehlern führen können (z. B. nicht verwendete Variablen)
  • Checkstyle zur Durchsetzung von Codierungsstandards und -konventionen (z. B. Whitespace, Javadoc)
  • Fehleranfällig hakt direkt in den Kompilierungsschritt Ihrer Anwendung ein

Alle diese Tools haben einige überlappende Regeln. Es gibt viele andere ähnliche Tools, aber diese sind die beliebtesten und am meisten unterstützten.

Mikroslatterie
quelle
Würden Sie sagen, dass Findbugs und PMD unterschiedliche Dinge tun? Als ich das letzte Mal darüber nachdachte, kam ich zu dem Schluss, dass sie ähnlich genug waren, dass wir nur eine brauchten (und PMD auswählten). Wir haben auch Checkstyle ausgeführt und festgestellt, dass sich sogar PMD und Checkstyle überlappen.
Tom Anderson
@ TomAnderson - ich würde sagen, dass sie definitiv verschiedene Dinge tun, ja. Beide haben einen Wert (offensichtlich gibt es auch Überschneidungen).
Jtahlborn
Ja, sehr unterschiedliche Ziele. Findbugs versucht, IST-Fehler zu finden, manchmal durch gründliche Analyse. PMD sucht nur nach Mustern, von denen bekannt ist, dass sie manchmal zu Fehlern führen. Persönlich verwende ich FindBugs und Checkstyle, da es weniger Überlappungen gibt.
Mikelattery
Vielleicht möchten Sie erwähnen, dass pmd zwei verschiedene Arten von Prüfungen hat, pmd und cpd.
Jtahlborn
4
Findbugs ist jetzt SpotBugs (auf GitHub )
Matruskan
12

Schauen Sie sich auch Sonar an , das viele der anderen Tools kombiniert und auch eine schöne Ansicht bietet.

Regeln von Checkstyle, FindBugs, PMD, Clirr, fb-Contrib.


Sie wissen nicht genau, wie Sie es einem Post-Commit-Hook hinzufügen sollen, aber http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven ist möglicherweise ein guter Ausgangspunkt (insbesondere, wenn Sie Maven verwenden).

Vielleicht sollten Sie sogar einen der unter http://docs.codehaus.org/display/SONAR/Continuous+Integration aufgeführten Ansätze in Betracht ziehen, da Sie anscheinend versuchen, nach besseren Werkzeugen für Ihr gesamtes Team zu suchen ("Obwohl einige Untergruppen von Diese Funktionen wären besser als das, was wir jetzt haben - nichts! "

yegeniy
quelle
2
+1 Vier Jahre nach der Frage scheint SonarQube aktiver, moderner und vollständiger zu sein. Früher wurden die oben genannten Tools kombiniert, jetzt werden sie nativ implementiert, um Überschneidungen zu vermeiden. Blog.sonarsource.com/…
user2518618
-1

Genau daran arbeite ich: ein Tool, das CLI-freundlich ist, um die Qualität von Java-Code zu überprüfen. Es hat auch eine interaktive Modalität. Sie können einzelne Abfragen (um nach einzelnen Warnungen zu suchen) oder alle Abfragen zusammen ausführen.

Das Tool befindet sich in einem frühen Stadium, aber ich arbeite fast jeden Tag daran. Es ist hier verfügbar:

https://github.com/ftomassetti/effectivejava

Bitte lassen Sie mich wissen, was Sie darüber denken und zögern Sie nicht, Fragen zu stellen.

Federico Tomassetti
quelle
3
Das letzte Commit dieses Projekts war vor 2 Jahren. Ich bin mir nicht sicher, ob dies noch aktiv entwickelt wird.
Daniel Eagle
Nein ist es nicht. Aber dann fing ich an, an JavaParser zu arbeiten. Dieses Projekt gibt Ihnen keine CLI, auf der es aufbauen könnte.
Federico Tomassetti