Skip to content

Commit 167012a

Browse files
Add dependency-analysis-gradle-plugin (#3158)
Motivation: The Dependency Analysis Gradle Plugin (DAGP) detects the following problems with dependencies: unused dependencies, used transitive dependencies that should be declared directly, dependencies declared on the wrong configuration. Modifications: - Add new plugin as part of our main `build.gradle` file; - Make `buildHealth` task part of the `quality` task; - When run PRQ action on CI, print report to console; - Make sure `copySourcesForJersey3` task always executes before dependency-analysis as it depends on copied source code; Result: We can automatically detect issues with dependencies.
1 parent 135a994 commit 167012a

File tree

13 files changed

+106
-1
lines changed

13 files changed

+106
-1
lines changed

.github/workflows/ci-prq.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
- name: Clean Gradle project
3838
run: ./gradlew --parallel clean
3939
- name: Build with Gradle
40-
run: ./gradlew --parallel quality
40+
run: ./gradlew --parallel -Pdependency.analysis.print.build.health=true quality
4141
- name: Upload CheckStyle Results
4242
if: always()
4343
uses: actions/upload-artifact@v4

build.gradle

+34
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,40 @@ if (!repositories) {
4242
print("This machine already has some pre-configured repositories, will use: ${repositories*.name.join(", ")}")
4343
}
4444

45+
buildscript {
46+
if (!repositories) {
47+
repositories {
48+
gradlePluginPortal()
49+
}
50+
}
51+
dependencies {
52+
if (JavaVersion.current().isJava11Compatible()) {
53+
classpath("com.autonomousapps:dependency-analysis-gradle-plugin:$dependencyAnalysisPluginVersion")
54+
}
55+
}
56+
}
57+
4558
apply plugin: "io.servicetalk.servicetalk-gradle-plugin-internal-root"
4659

60+
// Unfortunately, we can not make this validation part of our servicetalk-gradle-plugin-internal because it requires
61+
// JDK11 while we build and package out plugin with JDK8.
62+
if (JavaVersion.current().isJava11Compatible()) {
63+
apply plugin: "com.autonomousapps.dependency-analysis"
64+
65+
dependencyAnalysis {
66+
issues {
67+
all {
68+
onAny {
69+
severity("warn") // FIXME: switch to "fail" when all issues are addressed
70+
exclude("com.google.code.findbugs:jsr305")
71+
}
72+
}
73+
}
74+
}
75+
76+
quality.dependsOn buildHealth
77+
}
78+
4779
task validateLocalDocSite(type: Exec) {
4880
group 'Documentation'
4981
description 'Generate and validate servicetalk.io site documentation'
@@ -56,6 +88,8 @@ subprojects {
5688
// mockito 5 only supports jdk11+
5789
if (JavaVersion.current() < JavaVersion.VERSION_11) {
5890
project.setProperty("mockitoCoreVersion", mockitoCorePreJdk11Version)
91+
} else {
92+
apply plugin: "com.autonomousapps.dependency-analysis"
5993
}
6094
// Used by ci-release.yaml to determine which modules need to be built/released with JDK11.
6195
task printJavaTargetCompatibility {

gradle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ mockitoCoreVersion=5.14.2
9595
# mockito version is overridden for <jdk11 due to incompatibilities with newer bytebuddy and class format
9696
mockitoCorePreJdk11Version=4.11.0
9797
spotbugsPluginVersion=5.0.13
98+
dependencyAnalysisPluginVersion=2.6.1
9899

99100
apacheDirectoryServerVersion=1.5.7
100101
commonsLangVersion=2.6

servicetalk-data-jackson-jersey3-jakarta10/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6868
tasks.compileJava.dependsOn(copySourcesForJersey3)
6969
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7070
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
71+
afterEvaluate {
72+
if (tasks.findByName("projectHealth")) {
73+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
74+
dependsOn(copySourcesForJersey3)
75+
}
76+
}
77+
}
7178

7279
def actualJerseyVersion = "${jersey3VersionEE10}"
7380
def actualJaxRsVersion = "${jaxRsVersionEE10}"

servicetalk-data-jackson-jersey3-jakarta9/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6868
tasks.compileJava.dependsOn(copySourcesForJersey3)
6969
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7070
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
71+
afterEvaluate {
72+
if (tasks.findByName("projectHealth")) {
73+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
74+
dependsOn(copySourcesForJersey3)
75+
}
76+
}
77+
}
7178

7279
def actualJerseyVersion = "${jersey3VersionEE9}"
7380
def actualJaxRsVersion = "${jaxRsVersionEE9}"

servicetalk-data-protobuf-jersey3-jakarta10/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ tasks.compileJava.dependsOn(copySourcesForJersey3)
7676
tasks.generateTestProto.dependsOn(copySourcesForJersey3)
7777
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7878
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
79+
afterEvaluate {
80+
if (tasks.findByName("projectHealth")) {
81+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
82+
dependsOn(copySourcesForJersey3)
83+
}
84+
}
85+
}
7986

8087
def actualJerseyVersion = "${jersey3VersionEE10}"
8188
def actualJaxRsVersion = "${jaxRsVersionEE10}"

servicetalk-data-protobuf-jersey3-jakarta9/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ tasks.compileJava.dependsOn(copySourcesForJersey3)
7676
tasks.generateTestProto.dependsOn(copySourcesForJersey3)
7777
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7878
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
79+
afterEvaluate {
80+
if (tasks.findByName("projectHealth")) {
81+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
82+
dependsOn(copySourcesForJersey3)
83+
}
84+
}
85+
}
7986

8087
def actualJerseyVersion = "${jersey3VersionEE9}"
8188
def actualJavaxActivationVersion = "${javaxActivationVersionEE9}"

servicetalk-http-router-jersey3-jakarta10-internal/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ task copySourcesForJersey3(type: Copy) {
6363
tasks.processResources.dependsOn(copySourcesForJersey3)
6464
tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6565
tasks.compileJava.dependsOn(copySourcesForJersey3)
66+
afterEvaluate {
67+
if (tasks.findByName("projectHealth")) {
68+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
69+
dependsOn(copySourcesForJersey3)
70+
}
71+
}
72+
}
6673

6774
def actualJerseyVersion = "${jersey3VersionEE10}"
6875
def actualJaxRsVersion = "${jaxRsVersionEE10}"

servicetalk-http-router-jersey3-jakarta10/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
7070
tasks.compileJava.dependsOn(copySourcesForJersey3)
7171
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7272
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
73+
afterEvaluate {
74+
if (tasks.findByName("projectHealth")) {
75+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
76+
dependsOn(copySourcesForJersey3)
77+
}
78+
}
79+
}
7380

7481
def actualJerseyVersion = "${jersey3VersionEE10}"
7582
def actualJavaxActivationVersion = "${javaxActivationVersionEE10}"

servicetalk-http-router-jersey3-jakarta9-internal/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ task copySourcesForJersey3(type: Copy) {
6363
tasks.processResources.dependsOn(copySourcesForJersey3)
6464
tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6565
tasks.compileJava.dependsOn(copySourcesForJersey3)
66+
afterEvaluate {
67+
if (tasks.findByName("projectHealth")) {
68+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
69+
dependsOn(copySourcesForJersey3)
70+
}
71+
}
72+
}
6673

6774
def actualJerseyVersion = "${jersey3VersionEE9}"
6875
def actualJaxRsVersion = "${jaxRsVersionEE9}"

servicetalk-http-router-jersey3-jakarta9/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
7070
tasks.compileJava.dependsOn(copySourcesForJersey3)
7171
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7272
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
73+
afterEvaluate {
74+
if (tasks.findByName("projectHealth")) {
75+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
76+
dependsOn(copySourcesForJersey3)
77+
}
78+
}
79+
}
7380

7481
def actualJerseyVersion = "${jersey3VersionEE9}"
7582
def actualJavaxActivationVersion = "${javaxActivationVersionEE9}"

servicetalk-http-security-jersey3-jakarta10/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6969
tasks.compileJava.dependsOn(copySourcesForJersey3)
7070
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7171
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
72+
afterEvaluate {
73+
if (tasks.findByName("projectHealth")) {
74+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
75+
dependsOn(copySourcesForJersey3)
76+
}
77+
}
78+
}
7279

7380
def actualJerseyVersion = "${jersey3VersionEE10}"
7481
def actualJaxRsVersion = "${jaxRsVersionEE10}"

servicetalk-http-security-jersey3-jakarta9/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ tasks.sourcesJar.dependsOn(copySourcesForJersey3)
6969
tasks.compileJava.dependsOn(copySourcesForJersey3)
7070
tasks.processTestResources.dependsOn(copySourcesForJersey3)
7171
tasks.compileTestJava.dependsOn(copySourcesForJersey3)
72+
afterEvaluate {
73+
if (tasks.findByName("projectHealth")) {
74+
tasks.withType(com.autonomousapps.tasks.CodeSourceExploderTask) {
75+
dependsOn(copySourcesForJersey3)
76+
}
77+
}
78+
}
7279

7380
def actualJerseyVersion = "${jersey3VersionEE9}"
7481
def actualJaxRsVersion = "${jaxRsVersionEE9}"

0 commit comments

Comments
 (0)