web-dev-qa-db-ja.com

Findbugsの「excludes」設定とGradleのCheckstyleプラグインの使用

次のGradleビルドファイルがあります: https://github.com/markuswustenberg/jsense/blob/a796055f984ec309db3cc0f3e8340cbccac36e4e/jsense-protobuf/build.gradle これには以下が含まれます:

checkstyle {
  // TODO The excludes are not working, ignore failures for now
  //excludes '**/org/jsense/serialize/protobuf/gen/**'
  ignoreFailures = true
  showViolations = false
}

findbugs {
  // TODO The excludes are not working, ignore failures for now
  //excludes '**/org/jsense/serialize/protobuf/gen/**'
  ignoreFailures = true
}

ご覧のとおり、パッケージorg.jsense.serialize.protobuf.genで自動生成されたコードを除外しようとしています。 excludesパラメーターに指定された文字列の形式を理解できず、ドキュメントはあまり役に立ちません: http://www.gradle.org/docs/1.10/dsl/org.gradle.api .plugins.quality.FindBugs.html#org.gradle.api.plugins.quality.FindBugs:excludes (「除外パターンのセット」とだけ表示されます)。

だから私の質問は:FindbugsプラグインとCheckstyleプラグインの両方の除外パターン文字列をどのようにフォーマットする必要がありますか?

Gradle1.10を実行しています。

ありがとう!

EDIT 1:Checkstyleexcludeを以下で動作させました:

tasks.withType(Checkstyle) {
  exclude '**/org/jsense/serialize/protobuf/gen/**'
}

ただし、Findbugsプラグインでまったく同じ除外を使用しても機能しません。

tasks.withType(FindBugs) {
  exclude '**/org/jsense/serialize/protobuf/gen/*'
}

EDIT 2:受け入れられた回答は機能し、XMLファイルを使用してその上でフィルタリングすることもできます。

findbugs {
  excludeFilter = file("$projectDir/config/findbugs/excludeFilter.xml")
}

そして

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
  <Match>
    <Package name="org.jsense.serialize.protobuf.gen"/>
  </Match>
</FindBugsFilter>

編集3:これはうまく機能し、XMLファイルは必要ありません:

def excludePattern = 'org/jsense/serialize/protobuf/gen/'
def excludePatternAntStyle = '**/' + excludePattern + '*'
tasks.withType(FindBugs) {
    classes = classes.filter {
        !it.path.contains(excludePattern)
    }
}
tasks.withType(Checkstyle) {
    exclude excludePatternAntStyle
}
tasks.withType(Pmd) {
    exclude excludePatternAntStyle
}
13

SourceTask#excludeソースファイルをフィルタリングします。ただし、FindBugsは主にクラスファイルを操作するため、フィルタリングする必要があります。次のようなものを試してください:

tasks.withType(FindBugs) {
    exclude '**/org/jsense/serialize/protobuf/gen/*'
    classes = classes.filter { 
        !it.path.contains(new File("org/jsense/serialize/protobuf/gen/").path) 
    }
}

PS:FindBugsの場合、ソースファイルをフィルタリングしても違いがない可能性があります(したがって、必要ありません)。 (私は試していません。)

13

現代の解決策を探している人の場合:
checkstyleの場合、build.gradleで次のようなものを使用できます。

checkstyleMain.exclude '**/org/jsense/serialize/protobuf/gen/**'

複数のパスを除外する場合
解決策1:

checkstyleMain.exclude '**/org/jsense/serialize/protobuf/gen/**'
checkstyleMain.exclude '**/org/example/some/random/path/**'

解決策2:

checkstyleMain {
    setExcludes(new HashSet(['**/org/jsense/serialize/protobuf/gen/**', '**/org/example/some/random/path/**']))
}
0
Adam Selyem