Pergunta

I têm uma configuração de filtro de supressão de checkstyle (por exemplo ignorar mágica números no código de teste de unidade).

Os reside arquivo de supressão xml na mesma pasta que o arquivo checkstyle xml. No entanto, onde este arquivo é na verdade varia: no meu Windows dev caixa que está em d: \ dev \ shared \ checkstyle \ config no servidor Linux CI será em / root / repo / shared / checkstyle / config em outro desenvolvedores de caixa que poderia ser em qualquer lugar (que confira seu svn repo a).

A única coisa "consistente" é que o arquivo de supressão é sempre na mesma pasta que o arquivo checkstyle xml. Eu não posso trabalhar para fora como para garantir que esse arquivo é sempre consistentemente pegou. Também eu não sei por que checkstyle não suporta supressão incorporada no arquivo checkstyle xml.

qualquer ajuda?

Foi útil?

Solução

Eu tive esse mesmo problema com a configuração de supressão Checkstyle quando eu estava indo e voltando entre Linux e Windows. Aqui está como eu resolvi isso no meu sistema de compilação com base no Ant:

Basicamente, eu injetar o, valor diretório específico da plataforma adequada para o principal arquivo de configuração Checkstyle configurando um arquivo de propriedades Checkstyle com um script de construção Ant.

Meu arquivo de configuração Checkstyle principal tem uma declaração do módulo SuppressionFilter como mostrado abaixo. O valor da propriedade checkstyle-suppressions-file vem de um arquivo de propriedades Checkstyle:

<module name="SuppressionFilter">
    <property name="file" value="${checkstyle-suppressions-file}"/>
</module>

O arquivo de propriedades Checkstyle não é estática, ela é gerada por um script de construção Ant a partir de um modelo de propriedades de arquivo chamado template-checkstyle.properties. Aqui está o que os olhares modelo como para a propriedade de arquivo supressões:

checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml

Meu Ant script de construção copia esse arquivo para um checkstyle.properties arquivo chamado. A cópia tem o especial símbolo substituído com o valor adequado do diretório no qual o arquivo supressões é encontrada:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
    <filterset>
        <filter token="SCM_DIR" value="${scm.dir.unix}"/>
    </filterset>
</copy>

Agora, onde é que o valor de scm.dir.unix vem? Bem, é derivada a partir de uma propriedade do meu construir, a ler. Você precisa especificar um tal valor com os valores de diretório que você mencionou.

Note que há uma questão um pouco não-óbvia sobre a maneira em que você especificar este diretório. I dizer que o valor scm.dir.unix é derivado de uma propriedade de construção, porque eu observei que o principal arquivo de configuração Checkstyle não pode conter barras invertidas, personagens ou seja, o Windows separador de caminho, no valor da propriedade file do módulo SuppressionFilter. Por exemplo, especificar algo como leads C:\foo\bar\baz a uma mensagem de erro dizendo que Checkstyle C:foobarbaz não pode ser encontrado. I contornar isso "converter" o diretório scm.dir propriedade de compilação para um formato "unix" com tarefa pathconvert do Ant:

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

Em seguida, eu chamo o checkstyle tarefa Ant assim:

<checkstyle config="${scm.dir}/checkstyle_checks.xml"
            properties="${scm.dir}/checkstyle.properties">
    <!-- details elided -->
</checkstyle>

A chamada para as injeta tarefa checkstyle os pares de chave / valor contidos no arquivo checkstyle.properties na configuração principal Checkstyle.

Se você gosta, você pode ver os scripts completos aqui

Espero que isso ajude

Outras dicas

Em eclipse Eu coloquei o seguinte que não exigir-me a acrescentar quaisquer propriedades adicionais:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

Eu obter o caminho absoluto para o diretório onde reside build.xml usando a variável ant.file eo nome do projeto:

<project name="common" ... >
  <dirname property="thisdir" file="${ant.file.common}"/>

Então eu pode concatenar um caminho absoluto para meus arquivos de configuração checkstyle:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml

Uma vez que a variável thisdir vem de formiga, não parece à conversão separador de caminho necessidade.

Se você está trabalhando com eclipse e você tem o arquivo de supressão no mesmo diretório como a configuração checkstyle externo, você pode configurar um filtro de supressão como esta:

<module name="SuppressionFilter">
    <property name="file" value="${config_dir}/my_suppressions.xml"/>
</module>

Você também deve definir a propriedade $ {config_dir} na configuração checkstyle:

Preferências do Eclipse -> "Checkstyle" -> Escolha sua configuração cs -> "Propriedades .." -> "Propriedades adicionais .."

Definir uma propriedade para o checkstyle configuração dir:

config_dir --->  ${config_loc}

Eu acho que a resposta de Robert pode ser estendido para uma solução fácil para Ant e Eclipse :

Inclua o arquivo de supressão dentro do seu XML de configuração como esta:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

Agora, Eclipse está satisfeito e encontra o arquivo.

Para obter formiga para atualização trabalho seu alvo para algo como isto:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml">
    <!-- ... -->
    <property key="samedir" value="${checkstyle.config}"/>
</checkstyle>

Espero que isso ajude.

Desde CheckStyle 4.26.0 você pode usar constantes pré-definidas em seus arquivos de configuração.

( https://github.com/jshiell/checkstyle-idea/issues/ 217 ):

  • $ {basedir} & $ {project_loc} - é mapeado para o diretório atual projeto
  • $ {workspace_loc} - é mapeado para o diretório atual espaço de trabalho Eclipse
  • $ {config_loc} & $ {samedir} - são mapeados para o diretório as mentiras do arquivo de configuração no

Se você quiser compartilhar a configuração com o Maven você terá de "Alias" as "constantes Eclipse" em sua configuração POM (na seção de relatórios), utilizando o "propertyExpansion" elemento de configuração:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

O "propertyExpansion" é inspirado: https: // github .com / checkstyle / checkstyle / blob / master / pom.xml # L582 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top