У меня была такая же проблема с конфигурацией подавления 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
. Вот как выглядит шаблон для свойства файла suppressions:
checkstyle-suppressions-file=@SCM_DIR@/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
является производным от свойства сборки, поскольку я заметил, что основной файл конфигурации Checkstyle не может содержать обратную косую черту, то есть символы разделителя пути Windows, в значении свойства file
модуля SuppressionFilter
. Например, указание что-то вроде C:\foo\bar\baz
приводит к сообщению об ошибке Checkstyle о том, что C:foobarbaz
не может быть найдено. Я работаю над этим путем "преобразования" свойства сборки каталога scm.dir
в формат "unix" с помощью задачи 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.
Если хотите, вы можете увидеть полные сценарии здесь
Надеюсь, это поможет