SpotBugs FAQ

Este documento contém respostas para perguntas frequentes sobre o SpotBugs. Se você deseja apenas informações gerais sobre o SpotBugs, veja o manual.

Q1: Estou recebendo java.lang.UnsupportedClassVersionError quando tento executar o SpotBugs

O SpotBugs requer JRE8 ou posterior para funcionar. Se você usar uma versão anterior, você verá uma mensagem de erro de exceção semelhante à seguinte:

Exception in thread “main” java.lang.UnsupportedClassVersionError: edu/umd/cs/findbugs/gui/FindBugsFrame (Unsupported major.minor version 52.0)

A solução é atualizar para o JRE8 ou posterior.

Q2: O SpotBugs está ficando sem memória ou está demorando muito para terminar.

Em geral, o SpotBugs requer muita memória e uma CPU relativamente rápida. Para aplicações grandes, pode ser necessário 1024MB ou mais de espaço de heap.

Por padrão, os SpotBugs aloca 768MB de espaço de heap. Você pode aumentar isso usando a opção -maxHeap n, onde n é o número de megabytes de espaço de heap para alocar.

Q3: O que é o caminho de classe auxiliar “auxiliary classpath”? Por que devo especificar isso?

Muitos fatos importantes sobre uma classe Java requerem informações sobre as classes às quais faz referência. Por exemplo:

  • De quais outras classes e interfaces a classe herda

  • Quais exceções podem ser lançadas por métodos em classes externas e interfaces

O caminho de classe auxiliar “auxiliary classpath” é uma lista de arquivos Jar, diretórios e arquivos de classe contendo classes que são usadas pelo código que você deseja executar a análise com o SpotBugs, mas que não devem ser analisadas por SpotBugs.

Se SpotBugs não tiver informações completas sobre as classes referenciadas, não será capaz de produzir resultados tão precisos. Por exemplo, ter um repositório completo de classes referenciadas permite que o SpotBugs remova as informações de fluxo de controle para que possa se concentrar nos caminhos por meio de métodos que são mais viáveis em tempo de execução. Além disso, alguns detectores de bug (como o detector de comparação de referência suspeita) confiam na capacidade de realização de inferência de tipo, o que requer uma informações completas da hierarquia de tipo.

Por esses motivos, é altamente recomendável que você especifique completamente o classpath auxiliar ao executar o SpotBugs. Você pode fazer isso usando a opção de linha de comando -auxclasspath ou a lista na caixa de diálogo GUI em “Classpath entries”.

Se o SpotBugs não conseguir encontrar uma classe referenciada por seu aplicativo, ele irá imprimir uma mensagem quando a análise for concluída, especificando as classes que estavam faltando. Você deve modificar o caminho de classe auxiliar para especificar como encontrar as classes que faltam e, em seguida, executar o SpotBugs novamente.

Q4: O plugin do eclipse não carrega

Quando o Eclipse não consegue carregar a interface do plugin do SpotBugs apresenta a mensagem:

Plug-in “edu.umd.cs.findbugs.plugin.eclipse” was disabled due to missing or disabled prerequisite plug-in “org.eclipse.ui.ide”

A razão para este problema é que o plugin do SpotBugs não funciona com versões 3.x ou mais antigas do Eclipse. Use o Eclipse Neon (versão 4.6) ou mais recente.

Q5: Eu estou obtendo muitos avisos falsos para “OS” e “ODR”

Por padrão, o SpotBugs assume que qualquer invocação de método pode lançar uma exceção de tempo de execução não verificada. Como resultado, pode assumir que uma exceção lançada para fora do método pode ignorar uma chamada a um método close () para um fluxo ou recurso de banco de dados.

Você pode usar o argumento da linha de comando -workHard ou a propriedade de análise booleana findbugs.workHard para fazer o SpotBugs podar mais bordas de exceção improváveis. Isso geralmente reduz o número de avisos falsos, as custas do aumento do tempo de análise.

Q6: O plugin do Eclipse carrega, mas não funciona corretamente

  • verifique que o código Java que você está tentando analisar está construído e não possui caminhos de classes ou erros de compilação.

  • verifique se as configurações do SpotBugs para o projeto e workspace são válidas. Em caso de dúvidas, reverta as configurações para default.

  • Verifique se o log de erros não apresenta erros.

Q7: Onde está o plugin maven para o SpotBugs?

o plugin maven para o Spotbugs pode ser encontrado aqui.