Skip to content

Aplicando code style em projetos Java com Checkstyle

Last updated on September 6, 2020

Em projetos com mais de um desenvolvedor é fácil ver as diferenças de estilo em que cada um programa, deixando o codebase não uniforme. Dois ou quatro espaços na indentação? Espaços ou tabulação? Espaço entre o if e o parênteses? Já vi discussões ferrenhas sobre isso, claro que não no nível da série Silicon Valley (ver episódio S03E06).

Qual a importância de aplicar code style?

A maior parte do tempo de vida de um software não é no desenvolvimento, mas em manutenção, como correção de bugs e melhorias. Outro fato importante é que dificilmente quem desenvolveu o software ficará responsável por sua manutenção durante todo o tempo que ele estiver em operação. Quanto mais fácil de ler e compreender seu código, menos tempo um desenvolvedor levará para conseguir se integrar à equipe.

Portanto aplicar o code style é uma ação simples que reduz o “atrito” e contribui muito para a saúde do projeto. E lembre-se: a maior parte do nosso tempo passamos lendo código ao invés de escrevermos, justificando assim esse esforço.

Qual code style utilizar?

Esta é uma decisão que você deve tomar com o seu time, mas há dois estilos que sugiro para começar: da Sun ou da Google.

Minha sugestão é que você escolha um desses dois estilos já que são suportados pela biblioteca Checkstyle, que é uma ferramenta que auxilia a manter padrões de code style em projetos Java. Se me permite um pitaco: avalie com carinho a possibilidade de adotar o code style da Google, que vem sendo atualizado conforme a linguagem Java avança e conforme convenções de estilo são adotadas(o da Sun por outro lado traz os padrões definidos em 1999).


Configurando o Checkstyle

Para facilitar, vamos configurar o Checkstyle em um projeto existente, aquele que criamos no artigo da semana passada, o Spring Boot + Swagger: documentando sua API automaticamente. Baixe o projeto disponível neste repositório do Github.

Primeiramente, baixe o arquivo de configuração do Checkstyle diretamente de seu repositório. No nosso caso vamos baixar o referente ao code style da Google disponível neste link. Salve o arquivo de forma que seu caminho fique config/checkstyle/google_checks.xml.

Abra o build.gradle e insira o código abaixo:

apply plugin: 'checkstyle'

checkstyle {
    toolVersion = '8.10.1'
    configFile = rootProject.file('config/checkstyle/google_checks.xml')
    sourceSets = [sourceSets.main]
    configProperties = [
            'configDir': rootProject.file('config/checkstyle'),
            'baseDir': rootDir,
    ]
    showViolations = true
    ignoreFailures = true
}

checkstyleTest {
    enabled = false
}

Nosso build.gradle final:

Veja que na configuração do Checkstyle temos um ignoreFailures configurado com true. Eu recomendo esta configuração ao menos durante a fase de ajuste do projeto ao code style, já que sem ela a build irá falhar caso haja alguma violação de code style. Com esta configuração, warnings serão exibidos no log e um relatório será criado, para que você possa ver o que precisa ser ajustado.

Falando em relatório, vamos configurá-lo:

tasks.withType(Checkstyle) {
    reports {
        html.destination rootProject.file("build/reports/checkstyle.html")
    }
}

Faça agora uma build (gradle build) e verifique o relatório em build/reports/checkstyle . Para facilitar, o plugin checkstyle adicionou uma task permitindo que você cheque o status do projeto executando: gradle checkstyleMain.

Para entender as violações de code style e como resolvê-las, leia a documentação oficial do Checkstyle.


Autoformatando o código

Estão disponíveis arquivos XML que configuram a IDE para formatar o código automaticamente, resolvendo a maioria das violações de code style. Siga essas instruções e peça que seus colegas façam o mesmo caso tenham escolhido o code style da Google. Para o da Sun o processo é o mesmo, bastando substituir pelo arquivo correto.


Por hoje é isso. Fique à vontade para comentar ou me localizar nas redes sociais informadas aqui no blog, estou também disponível caso tenha alguma dúvida.

Published inProgramação

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *