Pregunta

Tengo una configuración de filtro de supresión de estilo de verificación (por ejemplo, ignorar los números mágicos en el código de prueba de la unidad).

El archivo xml de supresión reside en la misma carpeta que el archivo xml checkstyle. Sin embargo, el lugar donde realmente se encuentra este archivo varía: en mi cuadro de desarrollo de Windows está en d: \ dev \ shared \ checkstyle \ config en el servidor Linux CI estará en / root / repo / shared / checkstyle / config en otro cuadro de desarrolladores podría estar en cualquier lugar (revisan su repositorio de svn).

El único "consistente" El problema es que el archivo de supresión siempre está en la misma carpeta que el archivo checkstyle xml. No puedo encontrar la manera de asegurarme de que este archivo siempre se recoja de manera consistente. Además, no sé por qué checkstyle no admite la supresión incrustada dentro del archivo checkstyle xml.

¿alguna ayuda?

¿Fue útil?

Solución

Tuve el mismo problema con la configuración de supresión de Checkstyle cuando iba y venía entre Linux y Windows. Así es como lo resolví en mi sistema de compilación basado en Ant:

Básicamente, inserto el valor de directorio apropiado específico de la plataforma en el archivo de configuración principal de Checkstyle configurando un archivo de propiedades de Checkstyle con un script de compilación Ant.

Mi archivo de configuración principal de Checkstyle tiene una declaración de módulo SuppressionFilter como se muestra a continuación. El valor de la propiedad checkstyle-suppressions-file proviene de un archivo de propiedades de Checkstyle:

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

El archivo de propiedades de Checkstyle no es estático, es generado por un script de compilación Ant a partir de una plantilla de archivo de propiedades llamada template-checkstyle.properties . Así es como se ve la plantilla para la propiedad del archivo de supresiones:

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

El script de compilación My Ant copia este archivo en un archivo llamado checkstyle.properties . La copia tiene el token especial reemplazado por el valor apropiado del directorio en el que se encuentra el archivo de supresiones:

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

Ahora, ¿de dónde viene el valor de scm.dir.unix ? Bueno, es derivado de una propiedad de mi compilación, sigue leyendo. Deberá especificar dicho valor con los valores de directorio que mencionó.

Tenga en cuenta que hay un problema un poco no obvio relacionado con la forma en que especifica este directorio. Digo que el valor scm.dir.unix se deriva de una propiedad de compilación porque observé que el archivo de configuración principal de Checkstyle no puede contener barras invertidas, es decir, caracteres separadores de ruta de Windows, en el valor de archivo propiedad del módulo SuppressionFilter . Por ejemplo, especificar algo como C: \ foo \ bar \ baz lleva a un mensaje de error Checkstyle que dice que no se puede encontrar C: foobarbaz . Trabajo alrededor de esto "convirtiendo" la propiedad de compilación del directorio scm.dir a un " unix " formatear con la tarea pathconvert de Ant:

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

Entonces llamo a la tarea de checkstyle Ant así:

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

La llamada a la tarea checkstyle inyecta los pares clave / valor contenidos en el archivo checkstyle.properties en la configuración principal de Checkstyle.

Si lo desea, puede ver los scripts completos aquí

Espero que esto ayude

Otros consejos

En eclipse puse lo siguiente que no requería que agregara ninguna propiedad adicional:

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

Obtengo la ruta absoluta al directorio donde reside build.xml usando la variable ant.file y el nombre del proyecto:

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

Entonces puedo concatenar una ruta absoluta a mis archivos de configuración de checkstyle:

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

Dado que la variable thisdir proviene de ant, no parece necesitar la conversión del separador de ruta.

Si está trabajando con eclipse y tiene el archivo de supresión en el mismo directorio que la configuración de control de estilo externo, puede configurar un filtro de supresión como este:

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

También debe definir la propiedad $ {config_dir} en la configuración de estilo de comprobación:

Preferencias de Eclipse - > " Estilo de comprobación " - > Elija su configuración cs - > " Propiedades ... " - > " Propiedades adicionales .. "

Defina una propiedad para el directorio de configuración de checkstyle:

config_dir --->  ${config_loc}

Creo que la respuesta de Robert se puede extender a una solución fácil para hormiga y Eclipse :

Incluya el archivo de supresión dentro de su XML de configuración de esta manera:

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

Ahora, Eclipse está satisfecho y encuentra el archivo.

Para que Ant funcione, actualice su objetivo a algo como esto:

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

Espero que esto ayude.

Desde CheckStyle 4.26.0 puede usar constantes predefinidas en sus archivos de configuración.

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

  
      
  • $ {basedir} & amp; $ {project_loc}: se asigna al directorio del proyecto actual
  •   
  • $ {workspace_loc}: se asigna al directorio actual del espacio de trabajo de Eclipse
  •   
  • $ {config_loc} & amp; $ {samedir}: se asigna al directorio en el que se encuentra el archivo de configuración
  •   

Si desea compartir la configuración con Maven, necesitará "alias" las "constantes de eclipse" en su configuración de POM (en la sección de informes) utilizando la "expansión de propiedad" elemento de configuración:

<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>

La " propiedadExpansión " está inspirado en: https://github.com/checkstyle/checkstyle/ blob / master / pom.xml # L582 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top