Skip to content

Commit 5e4a502

Browse files
committed
Merge branch '2.4.x' into 2.5.x
Closes gh-28661
2 parents ef02db9 + 2cec397 commit 5e4a502

File tree

42 files changed

+455
-144
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+455
-144
lines changed

buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@
4848
import org.gradle.testretry.TestRetryPlugin;
4949
import org.gradle.testretry.TestRetryTaskExtension;
5050

51+
import org.springframework.boot.build.classpath.CheckClasspathForProhibitedDependencies;
5152
import org.springframework.boot.build.optional.OptionalDependenciesPlugin;
5253
import org.springframework.boot.build.testing.TestFailuresPlugin;
5354
import org.springframework.boot.build.toolchain.ToolchainPlugin;
55+
import org.springframework.util.StringUtils;
5456

5557
/**
5658
* Conventions that are applied in the presence of the {@link JavaBasePlugin}. When the
@@ -112,6 +114,7 @@ void apply(Project project) {
112114
configureJarManifestConventions(project);
113115
configureDependencyManagement(project);
114116
configureToolchain(project);
117+
configureProhibitedDependencyChecks(project);
115118
});
116119
}
117120

@@ -239,4 +242,26 @@ private void configureToolchain(Project project) {
239242
project.getPlugins().apply(ToolchainPlugin.class);
240243
}
241244

245+
private void configureProhibitedDependencyChecks(Project project) {
246+
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
247+
sourceSets.all((sourceSet) -> createProhibitedDependenciesChecks(project,
248+
sourceSet.getCompileClasspathConfigurationName(), sourceSet.getRuntimeClasspathConfigurationName()));
249+
}
250+
251+
private void createProhibitedDependenciesChecks(Project project, String... configurationNames) {
252+
ConfigurationContainer configurations = project.getConfigurations();
253+
for (String configurationName : configurationNames) {
254+
Configuration configuration = configurations.getByName(configurationName);
255+
createProhibitedDependenciesCheck(configuration, project);
256+
}
257+
}
258+
259+
private void createProhibitedDependenciesCheck(Configuration classpath, Project project) {
260+
CheckClasspathForProhibitedDependencies checkClasspathForProhibitedDependencies = project.getTasks().create(
261+
"check" + StringUtils.capitalize(classpath.getName() + "ForProhibitedDependencies"),
262+
CheckClasspathForProhibitedDependencies.class);
263+
checkClasspathForProhibitedDependencies.setClasspath(classpath);
264+
project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies);
265+
}
266+
242267
}

buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForProhibitedDependencies.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ private boolean prohibited(ModuleVersionIdentifier id) {
7070
if (group.equals("javax.batch")) {
7171
return false;
7272
}
73+
if (group.equals("javax.cache")) {
74+
return false;
75+
}
76+
if (group.equals("javax.money")) {
77+
return false;
78+
}
7379
if (group.startsWith("javax")) {
7480
return true;
7581
}

buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.springframework.boot.build.ConventionsPlugin;
3434
import org.springframework.boot.build.DeployedPlugin;
3535
import org.springframework.boot.build.classpath.CheckClasspathForConflicts;
36-
import org.springframework.boot.build.classpath.CheckClasspathForProhibitedDependencies;
3736
import org.springframework.boot.build.classpath.CheckClasspathForUnnecessaryExclusions;
3837
import org.springframework.util.StringUtils;
3938

@@ -62,7 +61,6 @@ public void apply(Project project) {
6261
project.getArtifacts().add("starterMetadata", project.provider(starterMetadata::getDestination),
6362
(artifact) -> artifact.builtBy(starterMetadata));
6463
createClasspathConflictsCheck(runtimeClasspath, project);
65-
createProhibitedDependenciesCheck(runtimeClasspath, project);
6664
createUnnecessaryExclusionsCheck(runtimeClasspath, project);
6765
configureJarManifest(project);
6866
}
@@ -75,14 +73,6 @@ private void createClasspathConflictsCheck(Configuration classpath, Project proj
7573
project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForConflicts);
7674
}
7775

78-
private void createProhibitedDependenciesCheck(Configuration classpath, Project project) {
79-
CheckClasspathForProhibitedDependencies checkClasspathForProhibitedDependencies = project.getTasks().create(
80-
"check" + StringUtils.capitalize(classpath.getName() + "ForProhibitedDependencies"),
81-
CheckClasspathForProhibitedDependencies.class);
82-
checkClasspathForProhibitedDependencies.setClasspath(classpath);
83-
project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies);
84-
}
85-
8676
private void createUnnecessaryExclusionsCheck(Configuration classpath, Project project) {
8777
CheckClasspathForUnnecessaryExclusions checkClasspathForUnnecessaryExclusions = project.getTasks().create(
8878
"check" + StringUtils.capitalize(classpath.getName() + "ForUnnecessaryExclusions"),

buildSrc/src/test/java/org/springframework/boot/build/ConventionsPluginTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ void sourceJarIsBuilt() throws IOException {
105105
out.println("version = '1.2.3'");
106106
out.println("sourceCompatibility = '1.8'");
107107
out.println("description 'Test'");
108+
out.println("repositories {");
109+
out.println(" mavenCentral()");
110+
out.println("}");
111+
out.println("dependencies {");
112+
out.println(" implementation(platform(\"org.junit:junit-bom:5.6.0\"))");
113+
out.println("}");
108114
}
109115
runGradle("build");
110116
File file = new File(this.projectDir, "/build/libs/" + this.projectDir.getName() + "-1.2.3-sources.jar");
@@ -134,6 +140,12 @@ void javadocJarIsBuilt() throws IOException {
134140
out.println("version = '1.2.3'");
135141
out.println("sourceCompatibility = '1.8'");
136142
out.println("description 'Test'");
143+
out.println("repositories {");
144+
out.println(" mavenCentral()");
145+
out.println("}");
146+
out.println("dependencies {");
147+
out.println(" implementation(platform(\"org.junit:junit-bom:5.6.0\"))");
148+
out.println("}");
137149
}
138150
runGradle("build");
139151
File file = new File(this.projectDir, "/build/libs/" + this.projectDir.getName() + "-1.2.3-javadoc.jar");

spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ dependencies {
3636
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
3737

3838
optional("ch.qos.logback:logback-classic")
39-
optional("com.datastax.oss:java-driver-core")
39+
optional("com.datastax.oss:java-driver-core") {
40+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
41+
}
4042
optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
4143
optional("com.github.ben-manes.caffeine:caffeine")
4244
optional("com.hazelcast:hazelcast")
@@ -48,7 +50,9 @@ dependencies {
4850
optional("io.micrometer:micrometer-core")
4951
optional("io.micrometer:micrometer-jersey2")
5052
optional("io.micrometer:micrometer-registry-appoptics")
51-
optional("io.micrometer:micrometer-registry-atlas")
53+
optional("io.micrometer:micrometer-registry-atlas") {
54+
exclude group: "javax.inject", module: "javax.inject"
55+
}
5256
optional("io.micrometer:micrometer-registry-datadog")
5357
optional("io.micrometer:micrometer-registry-dynatrace")
5458
optional("io.micrometer:micrometer-registry-elastic")
@@ -60,39 +64,68 @@ dependencies {
6064
optional("io.micrometer:micrometer-registry-kairos")
6165
optional("io.micrometer:micrometer-registry-new-relic")
6266
optional("io.micrometer:micrometer-registry-prometheus")
63-
optional("io.micrometer:micrometer-registry-stackdriver")
64-
optional("io.prometheus:simpleclient_pushgateway")
67+
optional("io.micrometer:micrometer-registry-stackdriver") {
68+
exclude group: "commons-logging", module: "commons-logging"
69+
exclude group: "javax.annotation", module: "javax.annotation-api"
70+
}
71+
optional("io.prometheus:simpleclient_pushgateway") {
72+
exclude group: "javax.xml.bind", module: "jaxb-api"
73+
}
6574
optional("io.micrometer:micrometer-registry-signalfx")
6675
optional("io.micrometer:micrometer-registry-statsd")
6776
optional("io.micrometer:micrometer-registry-wavefront")
6877
optional("io.projectreactor.netty:reactor-netty-http")
6978
optional("io.r2dbc:r2dbc-pool")
7079
optional("io.r2dbc:r2dbc-spi")
7180
optional("jakarta.jms:jakarta.jms-api")
81+
optional("jakarta.persistence:jakarta.persistence-api")
7282
optional("jakarta.servlet:jakarta.servlet-api")
7383
optional("javax.cache:cache-api")
7484
optional("net.sf.ehcache:ehcache")
75-
optional("org.apache.activemq:activemq-broker")
76-
optional("org.apache.commons:commons-dbcp2")
85+
optional("org.apache.activemq:activemq-broker") {
86+
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_1.1_spec"
87+
exclude group: "org.apache.geronimo.specs", module: "geronimo-j2ee-management_1.1_spec"
88+
}
89+
optional("org.apache.commons:commons-dbcp2") {
90+
exclude group: "commons-logging", module: "commons-logging"
91+
}
7792
optional("org.apache.kafka:kafka-clients")
7893
optional("org.apache.kafka:kafka-streams")
79-
optional("org.apache.solr:solr-solrj")
94+
optional("org.apache.solr:solr-solrj") {
95+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
96+
}
8097
optional("org.apache.tomcat.embed:tomcat-embed-core")
8198
optional("org.apache.tomcat.embed:tomcat-embed-el")
8299
optional("org.apache.tomcat:tomcat-jdbc")
83100
optional("org.aspectj:aspectjweaver")
84-
optional("org.eclipse.jetty:jetty-server")
101+
optional("org.eclipse.jetty:jetty-server") {
102+
exclude group: "javax.servlet", module: "javax.servlet-api"
103+
}
85104
optional("org.elasticsearch:elasticsearch")
86-
optional("org.elasticsearch.client:elasticsearch-rest-client")
105+
optional("org.elasticsearch.client:elasticsearch-rest-client") {
106+
exclude group: "commons-logging", module: "commons-logging"
107+
}
87108
optional("org.flywaydb:flyway-core")
88109
optional("org.glassfish.jersey.core:jersey-server")
89110
optional("org.glassfish.jersey.containers:jersey-container-servlet-core")
90-
optional("org.hibernate:hibernate-core")
91-
optional("org.hibernate:hibernate-micrometer")
111+
optional("org.hibernate:hibernate-core") {
112+
exclude group: "javax.activation", module: "javax.activation-api"
113+
exclude group: "javax.persistence", module: "javax.persistence-api"
114+
exclude group: "javax.xml.bind", module: "jaxb-api"
115+
exclude group: "org.jboss.spec.javax.transaction", module: "jboss-transaction-api_1.2_spec"
116+
}
117+
optional("org.hibernate:hibernate-micrometer") {
118+
exclude group: "javax.activation", module: "javax.activation-api"
119+
exclude group: "javax.persistence", module: "javax.persistence-api"
120+
exclude group: "javax.xml.bind", module: "jaxb-api"
121+
exclude group: "org.jboss.spec.javax.transaction", module: "jboss-transaction-api_1.2_spec"
122+
}
92123
optional("org.hibernate.validator:hibernate-validator")
93124
optional("org.influxdb:influxdb-java")
94125
optional("org.jolokia:jolokia-core")
95-
optional("org.liquibase:liquibase-core")
126+
optional("org.liquibase:liquibase-core") {
127+
exclude group: "javax.xml.bind", module: "jaxb-api"
128+
}
96129
optional("org.mongodb:mongodb-driver-reactivestreams")
97130
optional("org.mongodb:mongodb-driver-sync")
98131
optional("org.neo4j.driver:neo4j-java-driver")
@@ -103,13 +136,17 @@ dependencies {
103136
optional("org.springframework:spring-webflux")
104137
optional("org.springframework:spring-webmvc")
105138
optional("org.springframework.amqp:spring-rabbit")
106-
optional("org.springframework.data:spring-data-cassandra")
139+
optional("org.springframework.data:spring-data-cassandra") {
140+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
141+
}
107142
optional("org.springframework.data:spring-data-couchbase")
108143
optional("org.springframework.data:spring-data-jpa")
109144
optional("org.springframework.data:spring-data-ldap")
110145
optional("org.springframework.data:spring-data-mongodb")
111146
optional("org.springframework.data:spring-data-redis")
112-
optional("org.springframework.data:spring-data-elasticsearch")
147+
optional("org.springframework.data:spring-data-elasticsearch") {
148+
exclude group: "commons-logging", module: "commons-logging"
149+
}
113150
optional("org.springframework.integration:spring-integration-core")
114151
optional("org.springframework.kafka:spring-kafka")
115152
optional("org.springframework.security:spring-security-config")
@@ -125,15 +162,17 @@ dependencies {
125162
testImplementation("com.jayway.jsonpath:json-path")
126163
testImplementation("io.undertow:undertow-core")
127164
testImplementation("io.undertow:undertow-servlet") {
128-
exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
165+
exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.3_spec"
129166
exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_4.0_spec"
130167
}
131-
testImplementation("javax.xml.bind:jaxb-api")
168+
testImplementation("jakarta.xml.bind:jakarta.xml.bind-api")
132169
testImplementation("org.apache.logging.log4j:log4j-to-slf4j")
133170
testImplementation("org.aspectj:aspectjrt")
134171
testImplementation("org.assertj:assertj-core")
135172
testImplementation("org.awaitility:awaitility")
136-
testImplementation("org.eclipse.jetty:jetty-webapp")
173+
testImplementation("org.eclipse.jetty:jetty-webapp") {
174+
exclude group: "javax.servlet", module: "javax.servlet-api"
175+
}
137176
testImplementation("org.glassfish.jersey.ext:jersey-spring5")
138177
testImplementation("org.glassfish.jersey.media:jersey-media-json-jackson")
139178
testImplementation("org.hamcrest:hamcrest")
@@ -143,16 +182,17 @@ dependencies {
143182
testImplementation("org.mockito:mockito-junit-jupiter")
144183
testImplementation("org.skyscreamer:jsonassert")
145184
testImplementation("org.springframework:spring-orm")
146-
testImplementation("org.springframework.data:spring-data-elasticsearch") {
147-
exclude group: "org.elasticsearch.client", module: "transport"
148-
}
149185
testImplementation("org.springframework.data:spring-data-rest-webmvc")
150186
testImplementation("org.springframework.integration:spring-integration-jmx")
151-
testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc")
187+
testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc") {
188+
exclude group: "javax.servlet", module: "javax.servlet-api"
189+
}
152190
testImplementation("org.springframework.restdocs:spring-restdocs-webtestclient")
153191
testImplementation("org.springframework.security:spring-security-test")
154192
testImplementation("org.yaml:snakeyaml")
155193

194+
testRuntimeOnly("jakarta.management.j2ee:jakarta.management.j2ee-api")
195+
testRuntimeOnly("jakarta.transaction:jakarta.transaction-api")
156196
testRuntimeOnly("org.springframework.security:spring-security-oauth2-jose")
157197
testRuntimeOnly("org.springframework.security:spring-security-oauth2-resource-server")
158198
testRuntimeOnly("org.springframework.security:spring-security-saml2-service-provider")

spring-boot-project/spring-boot-actuator/build.gradle

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ description = "Spring Boot Actuator"
1111
dependencies {
1212
api(project(":spring-boot-project:spring-boot"))
1313

14-
optional("com.datastax.oss:java-driver-core")
14+
optional("com.datastax.oss:java-driver-core") {
15+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
16+
}
1517
optional("com.fasterxml.jackson.core:jackson-databind")
1618
optional("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
1719
optional("com.github.ben-manes.caffeine:caffeine")
@@ -22,29 +24,39 @@ dependencies {
2224
optional("io.lettuce:lettuce-core")
2325
optional("io.micrometer:micrometer-core")
2426
optional("io.micrometer:micrometer-registry-prometheus")
25-
optional("io.prometheus:simpleclient_pushgateway")
27+
optional("io.prometheus:simpleclient_pushgateway") {
28+
exclude(group: "javax.xml.bind", module: "jaxb-api")
29+
}
2630
optional("io.r2dbc:r2dbc-pool")
2731
optional("io.r2dbc:r2dbc-spi")
2832
optional("io.reactivex:rxjava-reactive-streams")
29-
optional("org.elasticsearch.client:elasticsearch-rest-client")
33+
optional("org.elasticsearch.client:elasticsearch-rest-client") {
34+
exclude(group: "commons-logging", module: "commons-logging")
35+
}
3036
optional("io.undertow:undertow-servlet") {
31-
exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
37+
exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.3_spec"
3238
exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_4.0_spec"
3339
}
3440
optional("javax.cache:cache-api")
35-
optional("javax.jms:javax.jms-api")
41+
optional("jakarta.jms:jakarta.jms-api")
3642
optional("net.sf.ehcache:ehcache")
37-
optional("org.apache.solr:solr-solrj")
43+
optional("org.apache.solr:solr-solrj") {
44+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
45+
}
3846
optional("org.apache.tomcat.embed:tomcat-embed-core")
3947
optional("org.aspectj:aspectjweaver")
40-
optional("org.eclipse.jetty:jetty-server")
48+
optional("org.eclipse.jetty:jetty-server") {
49+
exclude(group: "javax.servlet", module: "javax.servlet-api")
50+
}
4151
optional("org.elasticsearch:elasticsearch")
4252
optional("org.flywaydb:flyway-core")
4353
optional("org.glassfish.jersey.core:jersey-server")
4454
optional("org.glassfish.jersey.containers:jersey-container-servlet-core")
4555
optional("org.hibernate.validator:hibernate-validator")
4656
optional("org.influxdb:influxdb-java")
47-
optional("org.liquibase:liquibase-core")
57+
optional("org.liquibase:liquibase-core") {
58+
exclude(group: "javax.xml.bind", module: "jaxb-api")
59+
}
4860
optional("org.mongodb:mongodb-driver-reactivestreams")
4961
optional("org.mongodb:mongodb-driver-sync")
5062
optional("org.neo4j.driver:neo4j-java-driver")
@@ -55,9 +67,13 @@ dependencies {
5567
optional("org.springframework:spring-web")
5668
optional("org.springframework:spring-webmvc")
5769
optional("org.springframework.amqp:spring-rabbit")
58-
optional("org.springframework.data:spring-data-cassandra")
70+
optional("org.springframework.data:spring-data-cassandra") {
71+
exclude group: "org.slf4j", module: "jcl-over-slf4j"
72+
}
5973
optional("org.springframework.data:spring-data-couchbase")
60-
optional("org.springframework.data:spring-data-elasticsearch")
74+
optional("org.springframework.data:spring-data-elasticsearch") {
75+
exclude(group: "commons-logging", module: "commons-logging")
76+
}
6177
optional("org.springframework.data:spring-data-ldap")
6278
optional("org.springframework.data:spring-data-mongodb")
6379
optional("org.springframework.data:spring-data-redis")
@@ -88,7 +104,7 @@ dependencies {
88104

89105
testRuntimeOnly("ch.qos.logback:logback-classic")
90106
testRuntimeOnly("io.projectreactor.netty:reactor-netty-http")
91-
testRuntimeOnly("javax.xml.bind:jaxb-api")
107+
testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api")
92108
testRuntimeOnly("org.apache.tomcat.embed:tomcat-embed-el")
93109
testRuntimeOnly("org.glassfish.jersey.ext:jersey-spring5")
94110
testRuntimeOnly("org.hsqldb:hsqldb")

0 commit comments

Comments
 (0)