質問

チェックスタイルの抑制フィルターを設定しています(たとえば、ユニットテストコードのマジックナンバーを無視します)。

抑制xmlファイルは、checkstyle xmlファイルと同じフォルダーにあります。ただし、このファイルの実際の場所はさまざまです。 私のWindows開発ボックスでは、d:\ dev \ shared \ checkstyle \ configにあります Linux CIサーバーでは、/ root / repo / shared / checkstyle / configにあります 別の開発者ボックスでは、どこでもかまいません(svnリポジトリを確認してください)。

唯一の" consistent"抑制ファイルは常にcheckstyle xmlファイルと同じフォルダーにあるということです。 このファイルが常に一貫して取得されるようにする方法はわかりません。また、checkstyleがcheckstyle xmlファイル内の埋め込み抑制をサポートしない理由もわかりません。

ヘルプ?

役に立ちましたか?

解決

LinuxとWindowsを行き来する際に、Checkstyle抑制設定でも同じ問題が発生しました。 Antベースのビルドシステムで解決した方法は次のとおりです。

基本的に、Antビルドスクリプトを使用してCheckstyleプロパティファイルを構成することにより、メインのCheckstyle構成ファイルに適切なプラットフォーム固有のディレクトリ値を挿入します。

メインのCheckstyle構成ファイルには、以下に示すように SuppressionFilter モジュール宣言があります。 checkstyle-suppressions-file プロパティの値は、Checkstyleプロパティファイルから取得されます。

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

Checkstyleプロパティファイルは静的ではなく、 template-checkstyle.properties というプロパティファイルテンプレートからAntビルドスクリプトによって生成されます。抑制ファイルプロパティのテンプレートは次のようになります。

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

My 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 の値はどこから来たのですか?まあ、それは私のビルドのプロパティから派生です、読んでください。言及したディレクトリ値でこのような値を指定する必要があります。

このディレクトリを指定する方法に関して、わずかに非自明な問題があることに注意してください。メインのCheckstyle構成ファイルにはの値にバックスラッシュ、つまりWindowsパス区切り文字を含めることができないため、 scm.dir.unix の値はビルドプロパティから派生していると言います。 SuppressionFilter モジュールのfile プロパティ。たとえば、 C:\ foo \ bar \ baz のようなものを指定すると、 C:foobarbaz が見つからないというCheckstyleエラーメッセージが表示されます。この問題を回避するには、「変換」します。 scm.dir ディレクトリのビルドプロパティを&quot; unix&quot;に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構成に挿入します。

必要に応じて、完全なスクリプトをこちらで確認できます。

これが役立つことを願って

他のヒント

日食では、追加のプロパティを追加する必要のない次のものを追加しました:

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

ant.file 変数とプロジェクト名を使用して、 build.xml が存在するディレクトリへの絶対パスを取得します:

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

その後、チェックスタイル設定ファイルへの絶対パスを連結できます:

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

thisdir 変数はantから取得されるため、パス区切り文字の変換は必要ないようです。

Eclipseを使用していて、外部チェックスタイル設定と同じディレクトリに抑制ファイルがある場合、次のような抑制フィルターを設定できます。

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

また、チェックスタイル設定で$ {config_dir}プロパティを定義する必要があります:

Eclipseの設定-&gt; &quot;チェックスタイル&quot; -&gt; cs configを選択してください-&gt; &quot;プロパティ..&quot; -&gt; &quot;追加プロパティ..&quot;

checkstyle config dirのプロパティを定義します:

config_dir --->  ${config_loc}

ロバートの答えは、 antとEclipse の簡単なソリューションに拡張できると思います:

次のように、構成XML内に抑制ファイルを含めます。

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

今、Eclipseは満足してファイルを見つけました。

antを動作させるには、ターゲットを次のように更新します:

<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}&amp; $ {project_loc}-現在のプロジェクトディレクトリにマッピングされます
  •   
  • $ {workspace_loc}-現在のEclipseワークスペースディレクトリにマップされます
  •   
  • $ {config_loc}&amp; $ {samedir}-構成ファイルがあるディレクトリにマッピングされます
  •   

設定をmavenと共有する場合は、「エイリアス」を使用する必要があります。 「日食定数」 &quot; propertyExpansion&quot;を使用して、POM構成(レポートセクション)で構成要素:

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

&quot; propertyExpansion&quot;からインスピレーションを受けています: https://github.com/checkstyle/checkstyle/ blob / master / pom.xml#L582

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top