Uso do SpotBugs Plugin no SonarQube
The SpotBugs SonarQube Plugin uses major SpotBugs plugins such as fb-contrib and Find Security Bugs. However, if you want to use another SpotBugs plugin, you need to build your own SonarQube plugin. For detailed requirements on SonarQube plugins, see the SonarQube official guidelines.
Criação do projeto Maven
Follow the interaction in the SonarQube official guidelines. It is recommended to use sub-modules, to manage both the SpotBugs plugin and the SonarQube plugin in one project. You can refer to this module as an example.
Você também precisa configurar o sonar-packaging-maven-plugin para que seu plugin dependa do SpotBugs SonarQube Plugin. Por exemplo, se você estiver usando o SonarQube 6.7 LTS, seu plugin requer o SpotBugs SonarQube Plugin na versão 3.7. Sua configuração deve ser:
<configuration>
<basePlugin>findbugs</basePlugin>
<requirePlugins>findbugs:3.7</requirePlugins>
...
</configuration>
Geração do arquivo rules.xml
o SonarQube não entende os metadados de Bug Pattern fornecidos pelo SpotBugs. Dessa forma, é necessário converter findbugs.xml e messages.xml para o formato do sonarQube nomeado como rules.xml.
Se seu SpotBugs plugin não é complexo, você pode utilizar o SonarQube rule xml generator Maven Plugin para gerar o arquivo rules.xml. Siga as instruções descritas no README.
Atualização da classe RulesDefinition.java
Seu SonarQubeRulesDefinition.java deve carregar o arquivo rules.xml para o repositório do FindBugs.
Ao criar uma nova instância NewRepository, use FindbugsRulesDefinition.REPOSITORY_KEY como chave do repositório, e não a renomeia com o nome NewRepository#setName(String). Isso é necessário para satisfazer o requisito da SonarQube API. Por exemplo:
@Override
public void define(Context context) {
NewRepository repository =
context.createRepository(FindbugsRulesDefinition.REPOSITORY_KEY, Java.KEY);
RulesDefinitionXmlLoader ruleLoader = new RulesDefinitionXmlLoader();
ruleLoader.load(
repository,
getClass().getResourceAsStream(
"/path/to/rules.xml"),
"UTF-8");
repository.done();
}
Atualização da classe Plugin.java
A classe Plugin.java deve ser uma implementação simples que apenas carrega a classe``RulesDefinition``. Por exemplo:
@Override
public void define(Context context) {
context.addExtensions(Arrays.asList(SonarQubeRulesDefinition.class));
}
Deploy no SonarQube
O comando mvn package gera um arquivo .jar que funciona como um SonarQube plugin. Siga as diretrizes oficiais do SonarQube para implantação no SonarQube.
Observe que você precisa habilitar as regras manualmente no seu perfil do SonarQube ou as novas regras adicionadas não serão utilizadas na análise.