¿Existe un linter CLI Java simple? [cerrado]

86

He estado tratando de encontrar un linter de Java capaz de ejecutarse en la CLI que sea independiente de Eclipse al que pueda llamar como un gancho de confirmación para git o desde nuestro script de compilación automatizado. ¿Existe tal cosa?

Idealmente, debe verificar si hay importaciones y variables no utilizadas, que se sigan las pautas de estilo, que las excepciones se usen correctamente, etc. Aunque algún subconjunto de esas características sería mejor que lo que tenemos ahora, ¡nada!

BlueDragonX
fuente
2
//, ¿No es esta una solicitud de recomendación de software?
Nathan Basanese
3
No sé si debería preguntar aquí o en meta, pero ¿qué pasa con preguntas como esta que piden recomendaciones? Seguro que no hay una respuesta única y objetiva a esta pregunta, pero ese es el caso de muchas preguntas técnicas también. Esta pregunta podría reformularse como "No tengo un linter y no sé qué herramientas están disponibles, actualizadas y ampliamente utilizadas". ¿Eso ayudaría? Preferiría encontrar una Q / A curada, clasificada y registrada en la fecha en StackOverflow que en otro lugar. ¿A dónde deberían ir las personas con este tipo de preguntas, si no aquí?
Kyle Krull

Respuestas:

78
  • SpotBugs (antes Findbugs ) para encontrar errores existentes. ¡MUY BIEN!
  • PMD para encontrar patrones que pueden provocar errores (por ejemplo, variables no utilizadas)
  • Estilo de verificación para hacer cumplir los estándares y convenciones de codificación (por ejemplo, espacios en blanco, Javadoc)
  • Error Prone se conecta directamente al paso de compilación de su aplicación

Todas estas herramientas tienen algunas reglas superpuestas. Hay muchas otras herramientas similares, pero estas son las más populares y compatibles.

mikeslattery
fuente
¿Diría que Findbugs y PMD hacen cosas diferentes? La última vez que miré esto, concluí que eran lo suficientemente similares como para que solo necesitáramos uno (y elegimos PMD). También ejecutamos Checkstyle, y sí, descubrimos que incluso PMD y Checkstyle se superponen.
Tom Anderson
@TomAnderson - Yo diría que definitivamente hacen cosas diferentes, sí. Ambos tienen valor (obviamente también se superponen).
jtahlborn
Sí, metas muy diferentes. Findbugs intenta encontrar errores REALES, a veces mediante un análisis profundo. PMD solo busca patrones que se sabe que a veces conducen a errores. Personalmente, utilizo FindBugs y Checkstyle ya que hay menos superposición.
mikeslattery
es posible que desee mencionar que pmd tiene 2 tipos diferentes de cheques, pmd y cpd.
jtahlborn
4
Findbugs ahora es SpotBugs (en GitHub )
Matruskan
12

Además, echa un vistazo a Sonar , que combina muchas de las otras herramientas y también proporciona una buena vista.

reglas de Checkstyle, FindBugs, PMD, Clirr, fb-contrib.


No estoy seguro de cómo agregarlo a un enlace posterior a la confirmación, pero http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven podría ser un buen punto de partida (especialmente si está utilizando maven).

Tal vez incluso considere usar uno de los enfoques enumerados en http://docs.codehaus.org/display/SONAR/Continuous+Integration, ya que parece que podría estar tratando de buscar mejores herramientas para todo su equipo ("Aunque algún subconjunto esas características serían mejores que las que tenemos ahora, ¡nada! "

yegeniy
fuente
2
+1 Cuatro años después de que se hizo la pregunta, SonarQube parece ser más activo, moderno y completo. Solía ​​combinar las herramientas mencionadas anteriormente, pero ahora las implementa de forma nativa evitando las superposiciones blog.sonarsource.com/…
user2518618
-1

Esto es EXACTAMENTE en lo que estoy trabajando: una herramienta compatible con CLI que se utiliza para verificar la calidad del código Java. Tiene también una modalidad interactiva. Puede ejecutar consultas únicas (para buscar advertencias únicas) o todas las consultas juntas.

Las herramientas se encuentran en su etapa inicial, pero estoy trabajando en ellas casi todos los días. Está disponible aquí:

https://github.com/ftomassetti/effectivejava

Hágame saber qué piensa al respecto y no dude en hacer preguntas.

Federico Tomassetti
fuente
3
La última confirmación de este proyecto fue hace 2 años. No estoy seguro de si esto ya se está desarrollando activamente.
Daniel Eagle
No, no es. Pero luego comencé a trabajar en JavaParser. Ese proyecto no le proporciona una CLI, sino que podría construirse sobre él.
Federico Tomassetti