現在、build.gradleには次のFindBugsがあります。
apply plugin: "findbugs"
findbugs {
ignoreFailures = true
}
tasks.withType(FindBugs) {
reports {
xml.enabled = false
html.enabled = true
}
}
しかし、HTMLレポート(開発者が自分のマシンで表示するため)とXMLレポート(私のjenkins CIマシン用)の両方を有効にしようとすると、次のようになります
FindBugsタスクでは1つのレポートのみを有効にできますが、 1つのレポートが有効になりました。 1つを除くすべてを無効にする必要があります。
2つの異なるタスクを介してでも、両方を生成できるようにする方法/ハックはありますか?
回答:
回答№1は1おそらく可能ですが、現在の状態ではプラグインでは、FindBugsから拡張された別のタスクを定義する必要がありますが、標準のタスクとは異なる構成になっています。 問題は、FindBugsを実際に2回実行することであり、適切なサイズのコードベースではパフォーマンスが低下する可能性があります。
明らかに使用できません tasks.withType(FindBugs) { ... }
タスクを設定するには、タスク名で明示的に設定する必要があります。
注:これを実行している場合、たとえば Jenkins、build.gradleでxmlレポートを生成し、Jenkinsにxmlレポートからhtmlレポートを生成させます。そうすれば、ビルドで2回実行されることはありません。
回答№2の場合は1
XMLおよびHTMLレポートのfindbugsタスクを生成し、他の2つに依存するタスクを生成するようにGradleスクリプトを構成することでこれを解決しました。
def findbugsTask = task("findbugs") {
group "Verification"
}
[ "Html", "Xml" ].each { reportType ->
findbugsTask.dependsOn task("findbugs${reportType}", type: FindBugs) {
dependsOn "compileJavaWithJavac"
reports {
html.enabled = reportType == "Html"
xml.enabled = reportType == "Xml"
}
}
}
これによりFindbugsツールが2回実行されることに注意してください。これは通常、継続的な統合の問題にはなりません(コードベースが巨大でない限り)。