Posts Tagged ‘Checkstyle’
Apache Maven: customizar o relatório Checkstyle
Neste artigo mostrarei como customizar o relatório Checkstyle.
Porém, antes de proceguir, recomendo que veja os artigos anteriores.
Pois bem.
O relatório Checkstyle, por padrão, processa e apresenta TODAS as entradas como erro. Entretanto, alguns dos itens não necessariamente são erros: os itens relacionados a formatação, por exemplo. É claro que isso pode variar para cada empresa, cada profissional.
Diante desse meu argumento, apresentarei uma forma de customizar o relatório gerado pelo Checkstyle.
Em nosso projeto POM, adicionaremos uma entrada na configuração do plugin “maven-checkstyle-plugin”. Editem o arquivo pom.xml do projeto POM e façam com que a configuração fique como abaixo.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>${basedir}/src/site/checkstyle/checkstyle-custom.xml</configLocation>
</configuration>
</plugin>
Nesse exemplo, adicionamos a entraca “configuration” direcionando para um arquivo específico chamado “checkstyle-costom.xml”.
Salve o arquivo, incremente a versão (deve ser a 1.5, imagino) do POM e faça o deploy.
mvn install
Após esse procedimento, copie o arquivo “checkstyle-custom.xml” no projeto BASE (esse arquivo contém algumas alterações que movem o restuldado “error” para “info”, por exemplo).

Edite o arquivo pom.xml do projeto BASE e atualize a referência para o projeto POM. Gere o site.
mvn site
Veja o resultado gerado para o relatório do Checkstle.
Comparem com a primeira versão de relatório gerado pelo Checksyle e notem as diferenças. Nesta nova versão, muitos erros foram desconsiderados e entradas do tipo “info” foram apresentadas.
Arquivos POM
Até este momento, temos as seguintes versões dos arquivos POM:
Relatórios no Apache Maven : Informações do Projeto e Checkstyle
Neste artigo, vamos configurar alguns relatórios para ter uma visão mais concreta dos códigos JAVA produzidos.
Premissas
É interessante que antes de seguir com a leitura desse artigo, você tenha visto os 2 artigos anteriores:
Confira se seus arquivos POM estão como os abaixo:
Projeto POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <properties> <prop.resourcesDir>C:/apache-maven-2.1.0/www/resources</prop.resourcesDir> <prop.url>http://www.suaempersa.com.br</prop.url> <prop.organization>Sua Empresa</prop.organization> <prop.roleJavaDeveloper>Java Developer</prop.roleJavaDeveloper> </properties> <groupId>suaempresa</groupId> <artifactId>pom</artifactId> <version>1.1</version> <packaging>pom</packaging> <reporting> <outputDirectory>${prop.siteDir}/site/</outputDirectory> </reporting> </project>
Projeto Base
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <properties> <prop.siteDir>C:/apache-maven-2.1.0/www/Base</prop.siteDir> <prop.srcMainJava>src/main/java</prop.srcMainJava> </properties> <parent> <groupId>suaempresa</groupId> <artifactId>pom</artifactId> <version>1.1</version> </parent> <groupId>suaempresa</groupId> <artifactId>base</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>base</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <directory>${prop.siteDir}</directory> <sourceDirectory>${prop.srcMainJava}</sourceDirectory> <outputDirectory>${prop.siteDir}/target/classes</outputDirectory> </build> </project>
Se as duas configurações estiverem similares, pode prosseguir sem medo.
Relatórios
Os relatórios no Maven são configurados como plugins. Existem vários plugins que gerão relatórios agregados ao site gerado.
Veja uma lista de plugins disponíveis para o Maven.
Configurando relatório “project-info-reports”
Este é um relatório padrão gerado pelo Maven (veja o que foi gerado no site anteriormente) que apresenta informações como:
- Sumário
- Dependências
- Licença
- Equipe do Projeto, etc
Porém, você pode customizar os itens que quer gerar. Para isso, adicione no Projeto POM (exatamente, adicione sempre no pom.xml do Projeto POM sempre que quiser que um relatório seja usado por todos os seus projetos) o trecho de código abaixo da tag “reporting” (como é o primeiro plugin, adicionaremos a tag “plugins”).
<plugins> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <reportSets> <reportSet> <reports> <report>cim</report> <report>dependencies</report> <report>dependency-convergence</report> <report>dependency-management</report> <report>index</report> <report>license</report> <report>mailing-list</report> <report>plugin-management</report> <report>project-team</report> <report>scm</report> <report>summary</report> </reports> </reportSet> </reportSets> </plugin> </plugins>
Altere a versão para 1.2.
Vá ao diretório do Projeto POM e digite “mvn install”.
Com o Projeto POM na versão 1.2, agora podemos gerar um novo site e verificar o relatório gerado.
Vá ao diretório do Projeto Base, atualize o arquivo pom.xml com a versão referente ao Projeto POM e digite “mvn site”. Um novo site será gerado. Porém, como adicionamos todos os relatórios disponíveis, você não verá diferença com o site gerado no artigo anterior.
Faremos a seguinte alteração: vamos remover alguns relatórios no Projeto POM e criar um novo site. Mantenha somente os relatórios abaixo.
<reports> <report>dependencies</report> <report>index</report> <report>plugin-management</report> <report>project-team</report> <report>summary</report> </reports>
Pronto. Incremente para a versão 1.3 e gere um novo site, que deverá estar como a imagem abaixo.
Note que até agora fizemso alterações somente no Projeto POM, que é referenciado pelo Projeto Base. Essa é a idéia.
Configurando relatório “maven-checkstyle-plugin”
O Checkstyle provavelmente é um dos plugins do Maven mais utilizados. Ele propõe a “fofocar” sobre o estilo de código usado pelos desenvolvedores.
Para configurar este relatório, adicione o trecho abaixo no Projeto POM.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin>
Incremente para a versão 1.4 (Projeto POM e referência no Projeto Base) e gere um novo site, que deverá estar como a imagem abaixo.
Veja que foi adicionado a entrada “Project Reports” (abaixo de ‘Project Information”) com a entrada para o Checkstyle.
Os resultados do Checkstyle contemplam informações sobre:
- Sumário: resumo sobre a quantidade de arquivos e ocorrências identificadas como informativos, avisos e erros.
- Arquivos: resumo por arquivo.
- Regras: a definição das regras do Checkstyle (pode ser customizado)
- Detalhes: apresenta os itens relatados por arquivo, apresentado inclusive a linha da ocorrência.
As configurações do Checkstyle podem ser customizadas, mas não trataremos isso nesse artigo. Se tiver interesse, comente o artigo.
Conclusão
Este artigo apresentou os passos para configurar 2 plugins de relatórios do Maven. São relatórios iniciais para configurar em seus projetos corporativos.
Nos próximos artigos, relatórios mais “chatos” para os desenvolvedores: CPD e PMD.
Apache Maven – Relatórios
Os relatórios gerados pelo Maven são recursos disponíveis para visualizar o estado atual de um projeto. Existem vários relatórios disponíveis.
Relatórios sobre o Projeto
O Maven não mantém um conjunto de relatórios padrões para geração. Todos os relatórios são “plugáveis”. Isso significa que a instituição pode definir quais relatórios podem ser gerados para o site de seu projeto.
Os relatórios comumente utilizados são:
A lista dos plugins disponíveis para o Maven pode ser encontrada em:
Changelog
Este relatório é utilizado para verificar os detalhes das recentes alterações em código (ação de “commit”) realizadas pelos membros sobre os arquivos do projeto em um intervalo de tempo definido.
Possui três finalidades:
- Changelog: apresentar informações sobre os arquivos do projeto sincronizados por cada membro no CVS;
- Dev Activity: apresentar informações consolidadas sobre a sincronização dos arquivos no CVS pelos membros do projeto;
- File Activity: apresentar informações consolidadas sobre a sincronização dos arquivos no CVS.
Por padrão, são apresentados os resultados referentes aos últimos 30 dias.
Este relatório é integrado com o CVS e gerado automaticamente.
Para mais detalhes, clique aqui.
Changes
Este relatório é utilizado para verificar os detalhes das versões do projeto (ação “Tag as Version”).
As informações apresentadas neste relatório são definidas manualmente no arquivo “changes.xml”.
É possível definir endereços de e-mail para receber uma notificação das alterações realizadas (opcional).
Para mais detalhes, clique aqui.
Checkstyle
Este relatório é utilizado para verificar o estilo de codificação dos arquivos.
Por padrão, é utilizado o estilo de codificação sugerido pela SUN (tudo é capturado como “Errors”). No entanto, é possível personalizar os tipos de checagem.
As informações apresentadas nesse relatório devem ser corrigidas pelos programadores.
Para mais detalhes, clique aqui.
CPD
Este relatório é utilizado para verificar a existência de códigos duplicados.
As informações apresentadas nesse relatório devem ser corrigidas pelos programadores.
Para mais detalhes, clique aqui.
PMD
Este relatório é utilizado para verificar a existência de possíveis bugs, códigos não usados, códigos que podem ser substituídos por códigos mais otimizados, códigos desnecessários e códigos duplicados.
As informações apresentadas nesse relatório devem ser corrigidas pelos programadores.
Para mais detalhes, clique aqui.
Dashboard
Este relatório agrega as informações geradas pelos relatórios Checkstyle, Cobertura, Surefire, PMD e CPD.
Para que este relatório seja gerado, é necessário adicionar a linha de código abaixo:
mvn site -Djava.awt.headless=true
Para mais detalhes, clique aqui.
FindBugs
Este relatório é utilizado para apresentar os possíveis problemas (bugs) no código, separados em categorias como:
- Código malicioso
- Má Prática
- Internacionalização
- Performance, dentre outras.
As informações apresentadas nesse relatório devem ser corrigidas pelos programadores.
Para mais detalhes, clique aqui.
JavaDocs
Este relatório apresenta a documentação gerada para todas os pacotes, classes e interfaces existentes no projeto.
Para mais detalhes, clique aqui.
JDepend
Este relatório é utilizado para verificar as métricas de qualidade para cada pacote de código do projeto, a fim de medir a qualidade do design em termos de extensibilidade, reusabilidade e manutenibilidade para controlar as dependências entre os pacotes.
As principais informações relativas aos pacotes são:
- Number of Classes: número total de classes;
- Concrete Classes: número total de classes concretas;
- Abstract Classes: número total de classes abstratas e interfaces;
- Afferent Couplings: qual o impacto de alterações nas classes do atual pacote para as classes dos outros pacotes do projeto?
- Efferent Couplings: qual o impacto de alterações nas classes dos outros pacotes do projeto nas classes do pacote atual?
- Abstractness: porcentagem relativa ao número de classes abstratas do pacote;
- Instability: quanto mais o pacote atual depende de outros pacotes do sistema, mais instável ele é;
- Distance: a relação entre o pacote e “abstractness” e “instability”, ou seja, o pacote é mais abstrato (0) ou instável (1);
- Cycles: pacotes ciclicamente dependentes.
A intenção desse relatório é mostrar o quanto os pacotes e classes são interdependentes. A principal causa dessa dependência é o fato de existir classes concretas utilizando outras classes concretas de pacotes distintos.
Para mais detalhes, clique aqui.
Tag List
Este relatório é utilizado para verificar as marcações “TODO” existentes no código. É possível personalizar as marcações a serem verificadas (marcações “FIXME” e “@deprecated”, por exemplo).
Para mais detalhes, clique aqui.






