Вопрос

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

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

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

какая-нибудь помощь?

Это было полезно?

Решение

У меня была такая же проблема с конфигурацией подавления 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 . Вот как выглядит шаблон для свойства файла подавлений:

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>

Затем я вызываю Ant-задачу checkstyle следующим образом:

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

Вызов задачи checkstyle внедряет пары ключ / значение, содержащиеся в файле checkstyle.properties , в основную конфигурацию Checkstyle.

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

Надеюсь, это поможет

Другие советы

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

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

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

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

Затем я могу объединить абсолютный путь к моим файлам конфигурации checkstyle:

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

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

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

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

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

Настройки Eclipse - > & Quot; Checkstyle & Quot; - & GT; Выберите свой конфиг cs - > " Свойства .. " - & GT; " Дополнительные свойства .. "

Определите свойство для каталога конфигурации checkstyle:

config_dir --->  ${config_loc}

Я думаю, что ответ Роберта можно расширить на простое решение для муравья и 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>

Надеюсь, это поможет.

Начиная с CheckStyle 4.26.0, вы можете использовать предопределенные константы в своих конфигурационных файлах.

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

  • ${basedir} & ${project_loc} - сопоставляется с текущим каталогом проекта
  • ${workspace_loc} - сопоставляется с текущим каталогом рабочей области Eclipse
  • ${config_loc} & ${samedir} - получить сопоставление с каталогом, в котором находится файл конфигурации

Если вы хотите поделиться конфигурацией с maven, вам нужно будет "присвоить псевдоним" "константам eclipse" в вашей конфигурации POM (в разделе отчетов), используя элемент конфигурации "propertyExpansion" :

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

"Расширение собственности" вдохновлено : https://github.com/checkstyle/checkstyle/blob/master/pom.xml#L582.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top