2008-10-13 6 views
5

У меня есть настройка фильтра подавления контрольных стилей (например, игнорируйте магические числа в модульном тестовом коде).checkstyle + фильтры подавления

Файл подавления xml находится в той же папке, что и файл xstash checkstyle. Однако, где этот файл на самом деле меняется: на моих окнах dev box находится в d: \ dev \ shared \ checkstyle \ config на сервере Linux CI он будет в/root/repo/shared/checkstyle/config on другой блок разработчиков он может быть где угодно (они проверяют их svn repo).

Единственная «последовательная» вещь заключается в том, что файл подавления всегда находится в той же папке, что и файл xstash checkstyle. Я не могу понять, как обеспечить постоянный сбор этого файла. Также я не знаю, почему checkstyle не поддерживает встроенное подавление в XML-файле checkstyle.

любая помощь?

ответ

10

У меня была такая же проблема с конфигурацией подавления Checkstyle, когда я шел туда и обратно между Linux и Windows. Вот как я решил это в моей системе сборки на основе Ant:

В принципе, я вставляю правильное значение для конкретной платформы в основной файл конфигурации Checkstyle, настраивая файл свойств Checkstyle с помощью скрипта сборки Ant.

В моем основном конфигурационном файле Checkstyle есть объявление модуля SuppressionFilter, как показано ниже. Значение checkstyle-suppressions-file собственности исходит из свойств Checkstyle файла:

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

свойства файла Checkstyle не статична, она порождается Ant сценарий сборки из файла свойств шаблона называется template-checkstyle.properties. Вот то, что шаблон выглядит для свойства сдерживание файла:

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

Моего Ant копии сборки сценария этого файл в файл с именем checkstyle.properties. Копия имеет специальный маркер заменяется на исправном каталог, в котором находится файл сдерживание:

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

Теперь, где же значение scm.dir.unix взялось? Ну, это , полученный из свойства моей сборки, читайте дальше. Вам нужно указать такое значение со значениями каталога, которые вы упомянули.

Обратите внимание, что существует одна слегка неочевидная проблема, связанная с тем, как вы указываете этот каталог. Я говорю, что значение scm.dir.unix получено из свойства build, потому что я заметил, что основной файл конфигурации Checkstyle не может содержать обратную косую черту, то есть символы разделителя путей Windows, в значении свойства file модуля SuppressionFilter. Например, указание чего-то типа C:\foo\bar\baz приводит к сообщению об ошибке Checkstyle, в котором указано, что C:foobarbaz не найден.Я работаю вокруг этого «преобразования» накопление собственности scm.dir каталога в формате «Юникс» с Ant в pathconvert задачи:

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

Тогда я называю checkstyle Ant задачу так:

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

ВЫЗОВ МАСТЕРА к задаче checkstyle вводит пары ключ/значение, содержащиеся в файле checkstyle.properties, в основную конфигурацию Checkstyle.

Если вы хотите, вы можете увидеть полные сценарии here

Надеется, что это помогает

+0

Спасибо за советы, моя муравейная сборка теперь прекрасна, игнорируя магические числа в тестовых классах (это начало!). Мне нужно было внести одно изменение в прилагаемый вами код (для справки кому-либо еще, кто может прийти к нему позже), задача отсутствует «filtering = true»; по крайней мере, при работе с моей версией муравья. –

2

Я получаю абсолютный путь к каталогу, в котором build.xml проживает с помощью ant.file переменных и имя проекта:

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

Тогда я могу сцепить абсолютный путь к моему Checkstyle конфигурационных файлов:

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

Поскольку переменная thisdir исходит от муравья, она не нуждается в преобразовании разделителя пути.

2

Если вы работаете с затмением и у вас есть файл подавление в том же каталоге, что и внешний Checkstyle конфигурация, вы можете настроить фильтр подавления так:

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

Вы должны также определить $ { config_dir} свойство в конфигурации Checkstyle:

затмения настройки -> "Checkstyle" -> Выберите CS конфиг -> "Свойства .." -> "Дополнительные свойства .."

Определить свойство для Checkstyle config dir:

config_dir ---> ${config_loc} 
6

В затмении я поставил следующие, не требуют от меня, чтобы добавить дополнительные свойства:

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

Я думаю, что ответ Роберта может быть расширен до простого решения для муравей и Eclipse,:

Включите файл подавления внутри конфигурационного XML так:

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

Теперь Eclipse удовлетворен и находит файл.

Чтобы получить муравей работы обновить вашу цель, чтобы что-то вроде этого:

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

Надеется, что это помогает.