Existe um linter CLI Java simples? [fechadas]

86

Tenho tentado encontrar um linter Java capaz de ser executado na CLI que é separado do Eclipse que eu possa chamar como um gancho de confirmação para git ou de nosso script de construção automatizado. Será que tal coisa existe?

Idealmente, ele precisa verificar se há importações e variáveis ​​não utilizadas, se as diretrizes de estilo são seguidas, as exceções são usadas corretamente, etc. Embora algum subconjunto desses recursos seja melhor do que o que temos agora - nada!

BlueDragonX
fonte
2
//, isso não é um pedido de recomendação de software?
Nathan Basanese
3
Não sei se devo perguntar aqui ou no meta, mas o que há de errado com perguntas como essa que pedem recomendações? Claro que não há uma resposta única e objetiva para essa pergunta, mas, novamente, esse é o caso para muitas perguntas técnicas. Essa pergunta poderia ser reformulada como "Não tenho um linter e não sei quais ferramentas estão disponíveis, são atuais e são amplamente utilizadas". Isso ajudaria? Prefiro encontrar uma sessão de perguntas e respostas com curadoria, classificação e data registrada no StackOverflow do que em outro lugar. Para onde devem ir as pessoas com esse tipo de pergunta, senão aqui?
Kyle Krull

Respostas:

78
  • SpotBugs ( Findbugs anteriores ) para encontrar bugs existentes. MUITO BOM!
  • PMD para encontrar padrões que podem levar a bugs (por exemplo, variáveis ​​não utilizadas)
  • Estilo de verificação para impor padrões e convenções de codificação (por exemplo, espaço em branco, Javadoc)
  • A tendência a erros se conecta diretamente à etapa de compilação do seu aplicativo

Todas essas ferramentas têm algumas regras sobrepostas. Existem muitas outras ferramentas semelhantes, mas essas são as mais populares e suportadas.

mikeslattery
fonte
Você diria que Findbugs e PMD fazem coisas diferentes? A última vez que examinei isso, concluí que eram semelhantes o suficiente para que precisássemos apenas de um (e escolhemos o PMD). Também executamos Checkstyle e, sim, descobrimos que até PMD e Checkstyle se sobrepõem.
Tom Anderson
@TomAnderson - eu diria que eles definitivamente fazem coisas diferentes, sim. há valor para ambos (obviamente também há sobreposição).
jtahlborn
Sim, objetivos muito diferentes. Findbugs tenta encontrar bugs REAIS, às vezes fazendo uma análise profunda. O PMD apenas procura padrões conhecidos por às vezes levarem a bugs. Pessoalmente, eu uso FindBugs e Checkstyle, pois há menos sobreposição.
mikeslattery
você pode querer mencionar que pmd tem 2 tipos diferentes de cheques, pmd e cpd.
jtahlborn
4
Findbugs agora é SpotBugs (no GitHub )
Matruskan
12

Além disso, dê uma olhada no Sonar , que combina muitas das outras ferramentas e oferece uma bela vista para ele também.

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


Não sei exatamente como adicioná-lo a um gancho post-commit, mas http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven pode ser um bom ponto de partida (especialmente se você estiver usando o maven).

Talvez até considere usar uma das abordagens listadas em http://docs.codehaus.org/display/SONAR/Continuous+Integration, uma vez que parece que você pode estar tentando procurar ferramentas melhores para toda a sua equipe ("Embora algum subconjunto de esses recursos seriam melhores do que o que temos agora - nada! "

Yegeniy
fonte
2
+1 Quatro anos após a pergunta ser feita, SonarQube parece ser mais ativo, moderno e completo. Costumava combinar as ferramentas mencionadas acima, mas agora as implementa nativamente, evitando as sobreposições blog.sonarsource.com/…
user2518618
-1

É EXATAMENTE no que estou trabalhando: uma ferramenta amigável para CLI para ser usada para verificar a qualidade do código Java. Possui também modalidade interativa. Você pode executar consultas únicas (para verificar avisos únicos) ou todas as consultas juntas.

As ferramentas estão em seu estágio inicial, mas estou trabalhando nisso quase todos os dias. Ele está disponível aqui:

https://github.com/ftomassetti/effectivejava

Deixe-me saber o que você acha disso e fique à vontade para fazer perguntas.

Federico Tomassetti
fonte
3
O último commit deste projeto foi há 2 anos. Não tenho certeza se isso está mais sendo desenvolvido ativamente.
Daniel Eagle
Não não é. Mas então comecei a trabalhar no JavaParser. Esse projeto não dá a você uma CLI que poderia ser construída sobre ele.
Federico Tomassetti