2008-10-13 19 views
5

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

el archivo XML supresión reside en la misma carpeta que el archivo XML Checkstyle. Sin embargo, en este archivo es en realidad varía: en mi caja dev ventanas que se encuentra en D: \ dev \ shared \ Checkstyle \ config en el servidor Linux IC será en/root/repo/shared/Checkstyle/config en otra caja de desarrolladores podría estar en cualquier parte (revisan su repositorio svn).

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

¿Alguna ayuda?

Respuesta

10

tenía este mismo problema con la configuración de supresión Checkstyle cuando iba de ida y vuelta entre Linux y Windows. He aquí cómo lo resolví en mi sistema de construcción basado en Ant:

Básicamente, me inyecto el valor directorio adecuado, específico de la plataforma en el fichero de configuración principal Checkstyle mediante la configuración de un archivo de propiedades Checkstyle con un script de construcción Ant.

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

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

El archivo de propiedades Checkstyle no es estática, que es generado por un script de construcción Ant partir de un archivo de propiedades de plantilla llama template-checkstyle.properties. Esto es lo que la plantilla se parece a la propiedad del archivo supresiones:

[email protected][email protected]/checkstyle_suppressions.xml 

Mis Ant script copia acumulación este archivo a un archivo llamado checkstyle.properties. La copia tiene el testigo especial reemplazado con el valor correcto del directorio en el que se encuentra el archivo 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 viene? 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 una cuestión poco no evidentes respecto a la manera en la que se especifica este directorio. Yo digo que el valor scm.dir.unix se deriva de una característica de la estructura, porque he observado que el archivo de configuración principal Checkstyle no puede contener barras invertidas, es decir, caracteres separador de ruta de Windows, en el valor de la propiedad file del módulo SuppressionFilter. Por ejemplo, especificar algo como C:\foo\bar\baz conduce a un mensaje de error diciendo que Checkstyle C:foobarbaz no se puede encontrar.Yo trabajo alrededor de esto "convertir" a la característica de la estructura scm.dir directorio para un formato de "Unix" con pathconvert tarea de Ant:

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

Entonces me llaman la tarea Ant checkstyle así:

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

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

Si se quiere, se puede ver los guiones completos here

Esperanza esto ayuda

+0

Gracias por los consejos, mi construcción de hormigas ahora está bien, ignorando los números mágicos en las clases de prueba (¡es un comienzo!). Tuve que hacer un cambio en el código proporcionado (para referencia de cualquier otra persona que pueda llegar a esto más adelante), a la tarea le falta un "filtrado = verdadero"; al menos cuando se ejecuta con mi versión de hormiga. –

2

me sale la ruta absoluta al directorio donde build.xml reside utilizando 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 Checkstyle:

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

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

2

Si está trabajando con Eclipse y que tenga el archivo de supresión en el mismo directorio que el config Checkstyle externo, puede configurar un filtro de supresión de la siguiente manera:

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

También debe definir la $ { config_dir} característica en la configuración Checkstyle:

Eclipse Preferencias -> "Checkstyle" -> Cambiar la configuración de CS -> Propiedades ".." -> "Propiedades adicionales .."

definir una propiedad para la Checkstyle dir config:

config_dir ---> ${config_loc} 
6

en Eclipse que ponga la siguiente cosa que no me requiere para agregar las propiedades adicionales:

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

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

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

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

Ahora, Eclipse está satisfecho y encuentra el archivo.

Para obtener hormiga a trabajar al día su objetivo a algo como esto:

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

Espero que esto ayude.