チェックスタイル+抑制フィルター
-
10-07-2019 - |
質問
チェックスタイルの抑制フィルターを設定しています(たとえば、ユニットテストコードのマジックナンバーを無視します)。
抑制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 。