Skip to content

Commit d43cab5

Browse files
committed
Add spring-boot-micrometer-tracing if distributed tracing is selected with Boot 4
Closes gh-1951
1 parent 12b449a commit d43cab5

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

start-site/src/main/java/io/spring/start/site/extension/dependency/observability/ObservabilityDistributedTracingBuildCustomizer.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,26 @@
2020
import io.spring.initializr.generator.buildsystem.Dependency;
2121
import io.spring.initializr.generator.buildsystem.DependencyScope;
2222
import io.spring.initializr.generator.spring.build.BuildCustomizer;
23+
import io.spring.initializr.generator.version.Version;
24+
import io.spring.initializr.generator.version.VersionParser;
25+
import io.spring.initializr.generator.version.VersionRange;
2326

2427
/**
2528
* Configures distributed tracing if necessary.
2629
*
2730
* @author Stephane Nicoll
31+
* @author Moritz Halbritter
2832
*/
2933
class ObservabilityDistributedTracingBuildCustomizer implements BuildCustomizer<Build> {
3034

35+
private static final VersionRange SPRING_BOOT_4_OR_LATER = VersionParser.DEFAULT.parseRange("4.0.0-M1");
36+
37+
private final Version bootVersion;
38+
39+
ObservabilityDistributedTracingBuildCustomizer(Version bootVersion) {
40+
this.bootVersion = bootVersion;
41+
}
42+
3143
@Override
3244
public void customize(Build build) {
3345
// Zipkin without distributed tracing make no sense
@@ -40,6 +52,19 @@ public void customize(Build build) {
4052
Dependency.withCoordinates("io.micrometer", "micrometer-tracing-reporter-wavefront")
4153
.scope(DependencyScope.RUNTIME));
4254
}
55+
if (build.dependencies().has("distributed-tracing") && isBoot4OrLater()) {
56+
build.dependencies()
57+
.add("spring-boot-micrometer-tracing",
58+
Dependency.withCoordinates("org.springframework.boot", "spring-boot-micrometer-tracing"));
59+
build.dependencies()
60+
.add("spring-boot-micrometer-tracing-test",
61+
Dependency.withCoordinates("org.springframework.boot", "spring-boot-micrometer-tracing-test")
62+
.scope(DependencyScope.TEST_COMPILE));
63+
}
64+
}
65+
66+
private boolean isBoot4OrLater() {
67+
return SPRING_BOOT_4_OR_LATER.match(this.bootVersion);
4368
}
4469

4570
}

start-site/src/main/java/io/spring/start/site/extension/dependency/observability/ObservabilityProjectGenerationConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ ObservabilityActuatorBuildCustomizer observabilityActuatorBuildCustomizer() {
3636
}
3737

3838
@Bean
39-
ObservabilityDistributedTracingBuildCustomizer observabilityDistributedTracingBuildCustomizer() {
40-
return new ObservabilityDistributedTracingBuildCustomizer();
39+
ObservabilityDistributedTracingBuildCustomizer observabilityDistributedTracingBuildCustomizer(
40+
ProjectDescription description) {
41+
return new ObservabilityDistributedTracingBuildCustomizer(description.getPlatformVersion());
4142
}
4243

4344
@Bean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright 2012 - present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.spring.start.site.extension.dependency.observability;
18+
19+
import io.spring.initializr.metadata.Dependency;
20+
import io.spring.initializr.web.project.ProjectRequest;
21+
import io.spring.start.site.SupportedBootVersion;
22+
import io.spring.start.site.extension.AbstractExtensionTests;
23+
import org.junit.jupiter.api.Test;
24+
25+
import static org.assertj.core.api.Assertions.assertThat;
26+
27+
/**
28+
* Tests for {@link ObservabilityDistributedTracingBuildCustomizer}.
29+
*
30+
* @author Moritz Halbritter
31+
*/
32+
class ObservabilityDistributedTracingBuildCustomizerTests extends AbstractExtensionTests {
33+
34+
@Test
35+
void shouldAddMicrometerTracingOnBoot4OrLater() {
36+
ProjectRequest request = createProjectRequest(SupportedBootVersion.V4_0, "distributed-tracing");
37+
assertThat(mavenPom(request)).hasDependency("org.springframework.boot", "spring-boot-micrometer-tracing");
38+
assertThat(mavenPom(request)).hasDependency("org.springframework.boot", "spring-boot-micrometer-tracing-test",
39+
null, Dependency.SCOPE_TEST);
40+
}
41+
42+
@Test
43+
void shouldNotAddMicrometerTracingOnBootBefore4() {
44+
ProjectRequest request = createProjectRequest(SupportedBootVersion.V3_5, "distributed-tracing");
45+
assertThat(mavenPom(request)).doesNotHaveDependency("org.springframework.boot",
46+
"spring-boot-micrometer-tracing");
47+
assertThat(mavenPom(request)).doesNotHaveDependency("org.springframework.boot",
48+
"spring-boot-micrometer-tracing-test");
49+
}
50+
51+
}

0 commit comments

Comments
 (0)