6

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

抑制 xml ファイルは、checkstyle xml ファイルと同じフォルダーにあります。ただし、このファイルの実際の場所はさまざまです。私の Windows 開発ボックスでは、Linux CI サーバーでは d:\dev\shared\checkstyle\config にあり、別の開発者ボックスでは /root/repo/shared/checkstyle/config にあります。どこにでもある可能性があります(svnリポジトリをチェックアウトします)。

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

助けはありますか?

4

6 に答える 6

11

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」形式に「変換」することで、これを回避します。fileSuppressionFilterC:\foo\bar\bazC:foobarbazscm.dirpathconvert

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

次に、次のようにcheckstyleAnt タスクを呼び出します。

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

checkstyleタスクの呼び出しにより、checkstyle.propertiesファイルに含まれるキーと値のペアがメインの Checkstyle 構成に挿入されます。

必要に応じて、ここで完全なスクリプトを見ることができます

お役に立てれば

于 2008-10-13T22:39:23.573 に答える
6

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

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>
于 2013-02-21T19:26:31.643 に答える
2

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

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

また、checkstyle 構成で ${config_dir} プロパティを定義する必要があります。

Eclipse Preferences -> "Checkstyle" -> cs config を選択 -> "Properties .." -> "Additional Properties .."

checkstyle 構成ディレクトリのプロパティを定義します。

config_dir --->  ${config_loc}
于 2011-11-05T12:17:59.447 に答える
2

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

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

次に、checkstyle 構成ファイルへの絶対パスを連結できます。

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

変数はantから来ているので、thisdirパス区切りの変換は必要ないようです。

于 2009-06-03T14:25:22.767 に答える
1

ロバートの答えは、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>

お役に立てれば。

于 2013-03-05T14:50:32.047 に答える