/ / GradleのFindbugsプラグインからXMLレポートとHTMLレポートの両方を生成するにはどうすればよいですか-gradle、findbugs

GradleのfindbugsプラグインからXMLとHTMLの両方のレポートを生成するには - gradle、findbugs

現在、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回実行されることに注意してください。これは通常、継続的な統合の問題にはなりません(コードベースが巨大でない限り)。