次の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
}
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の場合、ソースファイルをフィルタリングしても違いがない可能性があります(したがって、必要ありません)。 (私は試していません。)
現代の解決策を探している人の場合:
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/**']))
}