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 プロパティー・ファイルは静的ではなく、 というプロパティー・ファイル・テンプレートから 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
どこから来るのでしょうか。まあ、それは私のビルドのプロパティから派生したものです。あなたが言及したディレクトリ値でそのような値を指定する必要があります。
このディレクトリを指定する方法に関して、わずかにわかりにくい問題が 1 つあります。メインの Checkstyle 構成ファイルでは、モジュールのプロパティのscm.dir.unix
値にバックスラッシュ (つまり、Windows のパス区切り文字) を含めることができないことがわかったので、値がビルド プロパティから派生したと言いました。たとえば、次のようなものを指定すると、それが見つからないという Checkstyle エラー メッセージが表示されます。Ant のタスクを使用してディレクトリ ビルド プロパティを「unix」形式に「変換」することで、これを回避します。file
SuppressionFilter
C:\foo\bar\baz
C:foobarbaz
scm.dir
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 構成に挿入されます。
必要に応じて、ここで完全なスクリプトを見ることができます
お役に立てれば