From b23ad4804722b5fc4502293c82d8baa6a36a53a5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 12 May 2026 08:55:38 -0700 Subject: [PATCH 1/2] Simplify ProtobufPluginAction `versionFromRuntimeClasspath` Simplify the stream logic to make use of `getAllComponents()` rather than using `getAllDependencies()` and `DependencyResult::getFrom`. See gh-50405 --- .../boot/gradle/plugin/ProtobufPluginAction.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java index 1ce24affa7f..91d33bd8da9 100644 --- a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java @@ -33,7 +33,6 @@ import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.DependencyResolveDetails; import org.gradle.api.artifacts.ModuleVersionSelector; import org.gradle.api.artifacts.component.ModuleComponentIdentifier; -import org.gradle.api.artifacts.result.DependencyResult; import org.gradle.api.artifacts.result.ResolvedComponentResult; import org.jspecify.annotations.Nullable; @@ -141,9 +140,8 @@ final class ProtobufPluginAction implements PluginApplicationAction { .getByName("runtimeClasspath") .getIncoming() .getResolutionResult() - .getAllDependencies() + .getAllComponents() .stream() - .map(DependencyResult::getFrom) .map(ResolvedComponentResult::getId) .filter(ModuleComponentIdentifier.class::isInstance) .map(ModuleComponentIdentifier.class::cast) From 6d307ed2508bf695323d47db31fd505e54bb9fea Mon Sep 17 00:00:00 2001 From: Dongliang Xie Date: Tue, 12 May 2026 20:50:29 +0800 Subject: [PATCH 2/2] Align protoc version with protobuf-java Update `ProtobufPluginAction` to align the protoc version with `protobuf-java` rather than `protobuf-java-util`. The util jar is only required for server gRPC code. See gh-50405 Signed-off-by: Dongliang Xie --- .../gradle/plugin/ProtobufPluginAction.java | 3 ++- .../ProtobufPluginActionIntegrationTests.java | 19 +++++++++++++++++++ ...rotobufPluginActionIntegrationTests.gradle | 3 +-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java index 91d33bd8da9..897c4eadacb 100644 --- a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ProtobufPluginAction.java @@ -41,6 +41,7 @@ import org.jspecify.annotations.Nullable; * applied. * * @author Andy Wilkinson + * @author Dongliang Xie */ final class ProtobufPluginAction implements PluginApplicationAction { @@ -49,7 +50,7 @@ final class ProtobufPluginAction implements PluginApplicationAction { private static final Dependency grpcDependency = new Dependency("io.grpc", "protoc-gen-grpc-java"); private static final List versionAlignment = List.of( - protocDependency.alignVersionWith("com.google.protobuf", "protobuf-java-util"), + protocDependency.alignVersionWith("com.google.protobuf", "protobuf-java"), grpcDependency.alignVersionWith("io.grpc", "grpc-util")); @Override diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.java index 1bec7cf1c88..aef986a3f75 100644 --- a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.java @@ -16,6 +16,10 @@ package org.springframework.boot.gradle.plugin; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + import org.junit.jupiter.api.TestTemplate; import org.springframework.boot.gradle.junit.GradleCompatibility; @@ -27,6 +31,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Integration tests for {@link ProtobufPluginAction}. * * @author Andy Wilkinson + * @author Dongliang Xie */ @GradleCompatibility class ProtobufPluginActionIntegrationTests { @@ -59,6 +64,20 @@ class ProtobufPluginActionIntegrationTests { .contains("com.google.protobuf:protoc:null -> 4.34.0"); } + @TestTemplate + void generatesProtoSourcesWhenProtobufJavaProvidesProtocVersion() throws IOException { + File proto = new File(this.gradleBuild.getProjectDir(), "src/main/proto/example.proto"); + proto.getParentFile().mkdirs(); + Files.writeString(proto.toPath(), """ + syntax = "proto3"; + option java_package = "com.example"; + message Example { + string name = 1; + } + """); + this.gradleBuild.build("generateProto"); + } + @TestTemplate void alignsVersionOfGrpcDependency() { assertThat(this.gradleBuild.build("dependencies", "--configuration", "protobufToolsLocator_grpc").getOutput()) diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.gradle index 103a6ed72d4..5f71e413657 100644 --- a/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ProtobufPluginActionIntegrationTests.gradle @@ -29,7 +29,7 @@ repositories { } dependencies { - implementation("com.google.protobuf:protobuf-java-util:4.34.0") + implementation("com.google.protobuf:protobuf-java:4.34.0") implementation("io.grpc:grpc-util:1.79.0") } @@ -60,4 +60,3 @@ tasks.register("generateProtoTasksGrpcPluginOptions") { tasks.withType(com.google.protobuf.gradle.GenerateProtoTask).each { println "${it.name}: ${it.pluginsForCaching.collect { it.options }}" } } } -