Revert "Rework dep management to avoid consumers picking up strict constraints"

This reverts commit b34a311d02 as,
having disabled the publishing of Gradle's module metadata (4f75ab5),
the changes are no longer needed.

See gh-19609
pull/19711/head
Andy Wilkinson 5 years ago
parent 4f75ab5f89
commit aefe52e4d0

@ -52,10 +52,6 @@ gradlePlugin {
id = "org.springframework.boot.conventions"
implementationClass = "org.springframework.boot.build.ConventionsPlugin"
}
dependencyManagementPlugin {
id = "org.springframework.boot.internal-dependency-management"
implementationClass = "org.springframework.boot.build.InternalDependencyManagementPlugin"
}
deployedPlugin {
id = "org.springframework.boot.deployed"
implementationClass = "org.springframework.boot.build.DeployedPlugin"

@ -1,60 +0,0 @@
/*
* Copyright 2020-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.build;
import java.util.Collections;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.plugins.JavaBasePlugin;
import org.springframework.boot.build.optional.OptionalDependenciesPlugin;
/**
* Plugin to apply internal dependency management to Spring Boot's projects. Uses a custom
* configuration to enforce a platform for Spring Boot's own build. This prevents the
* enforced (strict) constraints from being visible to external consumers.
*
* @author Andy Wilkinson
*/
public class InternalDependencyManagementPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getPlugins().withType(JavaBasePlugin.class, (java) -> configureDependencyManagement(project));
}
private void configureDependencyManagement(Project project) {
ConfigurationContainer configurations = project.getConfigurations();
Configuration dependencyManagement = configurations.create("internalDependencyManagement", (configuration) -> {
configuration.setVisible(false);
configuration.setCanBeConsumed(false);
configuration.setCanBeResolved(false);
});
configurations.matching((configuration) -> configuration.getName().endsWith("Classpath"))
.all((configuration) -> configuration.extendsFrom(dependencyManagement));
Dependency springBootParent = project.getDependencies().enforcedPlatform(project.getDependencies()
.project(Collections.singletonMap("path", ":spring-boot-project:spring-boot-parent")));
dependencyManagement.getDependencies().add(springBootParent);
project.getPlugins().withType(OptionalDependenciesPlugin.class, (optionalDependencies) -> configurations
.getByName(OptionalDependenciesPlugin.OPTIONAL_CONFIGURATION_NAME).extendsFrom(dependencyManagement));
}
}

@ -113,7 +113,7 @@ public class BomExtension {
for (String bomImport : group.getBoms()) {
this.putArtifactVersionProperty(group.getId(), bomImport, library.getVersionProperty());
this.dependencyHandler.add("api", this.dependencyHandler
.platform(createDependencyNotation(group.getId(), bomImport, library.getVersion())));
.enforcedPlatform(createDependencyNotation(group.getId(), bomImport, library.getVersion())));
}
}
}

@ -29,7 +29,6 @@ import org.gradle.api.plugins.PluginContainer;
import org.springframework.boot.build.ConventionsPlugin;
import org.springframework.boot.build.DeployedPlugin;
import org.springframework.boot.build.InternalDependencyManagementPlugin;
import org.springframework.boot.build.classpath.CheckClasspathForConflicts;
import org.springframework.boot.build.classpath.CheckClasspathForProhibitedDependencies;
import org.springframework.util.StringUtils;
@ -47,7 +46,6 @@ public class StarterPlugin implements Plugin<Project> {
plugins.apply(DeployedPlugin.class);
plugins.apply(JavaLibraryPlugin.class);
plugins.apply(ConventionsPlugin.class);
plugins.apply(InternalDependencyManagementPlugin.class);
StarterMetadata starterMetadata = project.getTasks().create("starterMetadata", StarterMetadata.class);
ConfigurationContainer configurations = project.getConfigurations();
Configuration runtimeClasspath = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);

@ -5,7 +5,6 @@ plugins {
id 'org.springframework.boot.auto-configuration'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
@ -17,13 +16,12 @@ configurations {
}
dependencies {
asciidoctorExtensions platform(project(':spring-boot-project:spring-boot-dependencies'))
asciidoctorExtensions enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-actuator')
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
implementation project(':spring-boot-project:spring-boot-autoconfigure')
implementation 'com.fasterxml.jackson.core:jackson-databind'
@ -31,7 +29,7 @@ dependencies {
implementation 'org.springframework:spring-core'
implementation 'org.springframework:spring-context'
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'ch.qos.logback:logback-classic'
optional 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
optional 'com.github.ben-manes.caffeine:caffeine'

@ -9,11 +9,10 @@ plugins {
description = 'Spring Boot Actuator'
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'com.fasterxml.jackson.core:jackson-databind'
optional 'com.hazelcast:hazelcast'
optional 'com.hazelcast:hazelcast-spring'

@ -4,7 +4,6 @@ plugins {
id 'org.springframework.boot.auto-configuration'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
@ -12,9 +11,10 @@ description = 'Spring Boot AutoConfigure'
dependencies {
api project(':spring-boot-project:spring-boot')
api platform(project(':spring-boot-project:spring-boot-dependencies'))
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'com.atomikos:transactions-jdbc'
optional 'com.atomikos:transactions-jta'
optional 'com.couchbase.client:couchbase-spring-cache'
@ -148,7 +148,7 @@ dependencies {
optional 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
optional 'redis.clients:jedis'
testImplementation platform(project(':spring-boot-project:spring-boot-parent'))
testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
testImplementation project(':spring-boot-project:spring-boot-test')
testImplementation 'ch.qos.logback:logback-classic'

@ -3,7 +3,6 @@ plugins {
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.integration-test'
id 'org.springframework.boot.internal-dependency-management'
}
description = "Spring Boot CLI"
@ -16,14 +15,16 @@ configurations {
dependencies {
compileOnly project(':spring-boot-project:spring-boot')
compileOnly 'jakarta.servlet:jakarta.servlet-api'
compileOnly 'org.codehaus.groovy:groovy-templates'
compileOnly 'org.springframework:spring-web'
dependenciesBom project(path: ':spring-boot-project:spring-boot-dependencies', configuration: 'effectiveBom')
implementation platform(project(':spring-boot-project:spring-boot-parent'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
implementation 'com.vaadin.external.google:android-json'
implementation 'jline:jline'
implementation 'net.sf.jopt-simple:jopt-simple'
@ -50,7 +51,7 @@ dependencies {
implementation 'org.springframework:spring-core'
implementation 'org.springframework.security:spring-security-crypto'
intTestImplementation platform(project(':spring-boot-project:spring-boot-dependencies'))
intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
intTestImplementation 'org.assertj:assertj-core'

@ -4,7 +4,6 @@ plugins {
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.integration-test'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
@ -15,13 +14,13 @@ configurations {
}
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
implementation project(':spring-boot-project:spring-boot-autoconfigure')
intTestDependencies project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
intTestImplementation project(':spring-boot-project:spring-boot-autoconfigure')
intTestImplementation project(':spring-boot-project:spring-boot-test')
intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
@ -32,7 +31,7 @@ dependencies {
intTestImplementation 'net.bytebuddy:byte-buddy'
intTestRuntimeOnly 'org.springframework:spring-web'
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'javax.servlet:javax.servlet-api'
optional 'org.apache.derby:derby'
optional 'org.hibernate:hibernate-core'

@ -2,14 +2,12 @@ plugins {
id 'java-library'
id 'maven-publish'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Properties Migrator'
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
implementation project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-metadata')

@ -5,7 +5,7 @@ plugins {
description = "Starter for JMS messaging using Apache ActiveMQ"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-jms'
api ('org.apache.activemq:activemq-broker') {

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Boot's Actuator which provides production ready features to help you monitor and manage your application"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-actuator-autoconfigure')
api 'io.micrometer:micrometer-core'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring AMQP and Rabbit MQ"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-messaging'
api 'org.springframework.amqp:spring-rabbit'

@ -5,7 +5,7 @@ plugins {
description = "Starter for aspect-oriented programming with Spring AOP and AspectJ"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-aop'
api 'org.aspectj:aspectjweaver'

@ -5,7 +5,7 @@ plugins {
description = "Starter for JMS messaging using Apache Artemis"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'jakarta.jms:jakarta.jms-api'
api 'jakarta.json:jakarta.json-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Batch"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc')
api 'org.springframework.batch:spring-batch-core'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Framework's caching support"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-context-support'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework.cloud:spring-cloud-spring-service-connector'
api 'org.springframework.cloud:spring-cloud-cloudfoundry-connector'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Cassandra distributed database and Spring Data Cassandra Reactive"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-tx'
api 'org.springframework.data:spring-data-cassandra'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Cassandra distributed database and Spring Data Cassandra"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-tx'
api 'org.springframework.data:spring-data-cassandra'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'io.projectreactor:reactor-core'
api 'io.reactivex:rxjava-reactive-streams'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Couchbase document-oriented database and Spring Data Couchbase"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api ('org.springframework.data:spring-data-couchbase') {
exclude group: 'com.couchbase.client', module: 'encryption'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api ('org.springframework.data:spring-data-elasticsearch') {
exclude group: 'org.elasticsearch.client', module: 'transport'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Data JDBC"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc')
api 'org.springframework.data:spring-data-jdbc'
}

@ -5,12 +5,12 @@ plugins {
description = "Starter for using Spring Data JPA with Hibernate"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-aop')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc')
api 'jakarta.transaction:jakarta.transaction-api'
api 'jakarta.persistence:jakarta.persistence-api'
api ('org.hibernate:hibernate-core') {
api ('org.hibernate:hibernate-core') {
exclude group: 'javax.activation', module: 'javax.activation-api'
exclude group: 'javax.persistence', module: 'javax.persistence-api'
exclude group: 'javax.xml.bind', module: 'jaxb-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Data LDAP"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework.data:spring-data-ldap'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'io.projectreactor:reactor-core'
api 'org.mongodb:mongodb-driver'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using MongoDB document-oriented database and Spring Data MongoDB"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.mongodb:mongodb-driver'
api ('org.springframework.data:spring-data-mongodb') {

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Neo4j graph database and Spring Data Neo4j"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework.data:spring-data-neo4j'
}

@ -5,6 +5,6 @@ plugins {
description = "Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis')
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework.data:spring-data-redis'
api 'io.lettuce:lettuce-core'

@ -5,7 +5,7 @@ plugins {
description = "Starter for exposing Spring Data repositories over REST using Spring Data REST"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
api 'org.springframework.data:spring-data-rest-webmvc'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using the Apache Solr search platform with Spring Data Solr"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api ('org.apache.solr:solr-solrj') {
exclude group: 'org.slf4j', module: 'jcl-over-slf4j'

@ -5,7 +5,7 @@ plugins {
description = "Starter for building MVC web applications using FreeMarker views"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.freemarker:freemarker'
api 'org.springframework:spring-context-support'

@ -5,7 +5,7 @@ plugins {
description = "Starter for building MVC web applications using Groovy Templates views"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
api 'org.codehaus.groovy:groovy-templates'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
api 'org.springframework.hateoas:spring-hateoas'
api 'org.springframework.plugin:spring-plugin-core'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Integration"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-aop')
api 'org.springframework.integration:spring-integration-core'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using JDBC with the HikariCP connection pool"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'com.zaxxer:HikariCP'
api 'org.springframework:spring-jdbc'

@ -5,7 +5,7 @@ plugins {
description = "Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-validation')

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'jakarta.servlet:jakarta.servlet-api'
api 'jakarta.websocket:jakarta.websocket-api'
api 'org.eclipse.jetty:jetty-servlets'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc')
api 'jakarta.activation:jakarta.activation-api'
api 'jakarta.xml.bind:jakarta.xml.bind-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for reading and writing json"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-web'
api 'com.fasterxml.jackson.core:jackson-databind'

@ -5,7 +5,7 @@ plugins {
description = "Starter for JTA transactions using Atomikos"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'com.atomikos:transactions-jms'
api 'com.atomikos:transactions-jta'

@ -5,7 +5,7 @@ plugins {
description = "Starter for JTA transactions using Bitronix"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'jakarta.jms:jakarta.jms-api'
api 'jakarta.transaction:jakarta.transaction-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'org.apache.logging.log4j:log4j-slf4j-impl'
api 'org.apache.logging.log4j:log4j-core'
api 'org.apache.logging.log4j:log4j-jul'

@ -5,7 +5,7 @@ plugins {
description = "Starter for logging using Logback. Default logging starter"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'ch.qos.logback:logback-classic'
api 'org.apache.logging.log4j:log4j-to-slf4j'
api 'org.slf4j:jul-to-slf4j'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Java Mail and Spring Framework's email sending support"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-context-support'
api 'com.sun.mail:jakarta.mail'

@ -5,7 +5,7 @@ plugins {
description = "Starter for building web applications using Mustache views"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'com.samskivert:jmustache'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Security's OAuth2/OpenID Connect client features"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'com.sun.mail:jakarta.mail'
api 'org.springframework.security:spring-security-config'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Security's OAuth2 resource server features"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework.security:spring-security-config'
api 'org.springframework.security:spring-security-core'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using the Quartz scheduler"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-context-support'
api 'org.springframework:spring-tx'

@ -5,6 +5,6 @@ plugins {
description = "Starter for using Reactor Netty as the embedded reactive HTTP server."
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'io.projectreactor.netty:reactor-netty'
}

@ -5,7 +5,7 @@ plugins {
description = "Starter for building RSocket clients and servers"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-reactor-netty')

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Security"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.springframework:spring-aop'
api 'org.springframework.security:spring-security-config'

@ -5,7 +5,7 @@ plugins {
description = "Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-test')

@ -5,7 +5,7 @@ plugins {
description = "Starter for building MVC web applications using Thymeleaf views"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.thymeleaf:thymeleaf-spring5'
api 'org.thymeleaf.extras:thymeleaf-extras-java8time'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'jakarta.annotation:jakarta.annotation-api'
api ('org.apache.tomcat.embed:tomcat-embed-core') {
exclude group: 'org.apache.tomcat', module: 'tomcat-annotations-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api 'io.undertow:undertow-core'
api ('io.undertow:undertow-servlet') {
exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Java Bean Validation with Hibernate Validator"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api 'org.glassfish:jakarta.el'
api 'org.hibernate.validator:hibernate-validator'

@ -5,7 +5,7 @@ plugins {
description = "Starter for using Spring Web Services"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
api 'com.sun.xml.messaging.saaj:saaj-impl'
api 'jakarta.xml.ws:jakarta.xml.ws-api'

@ -5,7 +5,7 @@ plugins {
description = "Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat')

@ -5,7 +5,7 @@ plugins {
description = "Starter for building WebFlux applications using Spring Framework's Reactive Web support"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json')
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-reactor-netty')

@ -5,7 +5,7 @@ plugins {
description = "Starter for building WebSocket applications using Spring Framework's WebSocket support"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')
api 'org.springframework:spring-messaging'
api 'org.springframework:spring-websocket'

@ -5,7 +5,7 @@ plugins {
description = "Core starter, including auto-configuration support, logging and YAML"
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
api project(':spring-boot-project:spring-boot')
api project(':spring-boot-project:spring-boot-autoconfigure')

@ -2,20 +2,18 @@ plugins {
id 'java-library'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
description = 'Spring Boot Test AutoConfigure'
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
implementation project(':spring-boot-project:spring-boot-test')
implementation project(':spring-boot-project:spring-boot-autoconfigure')
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'javax.json.bind:javax.json.bind-api'
optional 'javax.servlet:javax.servlet-api'
optional 'javax.transaction:javax.transaction-api'
@ -48,6 +46,7 @@ dependencies {
optional 'org.mongodb:mongodb-driver-async'
optional 'org.mongodb:mongodb-driver-reactivestreams'
testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
testImplementation 'ch.qos.logback:logback-classic'
testImplementation 'com.fasterxml.jackson.module:jackson-module-parameter-names'

@ -3,17 +3,16 @@ plugins {
id 'org.jetbrains.kotlin.jvm'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
description = 'Spring Boot Test'
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot')
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'com.fasterxml.jackson.core:jackson-databind'
optional 'com.google.code.gson:gson'
optional 'com.jayway.jsonpath:json-path'
@ -37,6 +36,7 @@ dependencies {
optional 'org.springframework:spring-webflux'
optional 'net.sourceforge.htmlunit:htmlunit'
testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
testImplementation 'io.mockk:mockk'
testImplementation 'javax.json:javax.json-api'

@ -2,7 +2,6 @@ plugins {
id 'java-library'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Antlib'
@ -20,11 +19,10 @@ dependencies {
antUnit "org.apache.ant:ant-antunit:1.3"
antIvy "org.apache.ivy:ivy:2.4.0"
api platform(project(":spring-boot-project:spring-boot-dependencies"))
compileOnly project(":spring-boot-project:spring-boot-tools:spring-boot-loader")
compileOnly "org.apache.ant:ant:${antVersion}"
implementation enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies"))
implementation project(":spring-boot-project:spring-boot-tools:spring-boot-loader-tools")
implementation "org.springframework:spring-core"
}

@ -2,14 +2,12 @@ plugins {
id 'java-library'
id 'maven-publish'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Configuration Metadata'
dependencies {
api platform(project(path: ":spring-boot-project:spring-boot-parent"))
implementation enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent"))
implementation "com.vaadin.external.google:android-json"
testImplementation "org.junit.jupiter:junit-jupiter"

@ -4,7 +4,6 @@ plugins {
id 'org.asciidoctor.jvm.convert'
id 'org.asciidoctor.jvm.pdf'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.maven-repository'
id 'org.springframework.boot.optional-dependencies'
}
@ -26,16 +25,14 @@ repositories {
}
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
asciidoctorExtensions 'io.spring.asciidoctor:spring-asciidoctor-extensions-block-switch:0.3.0.RELEASE'
implementation platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
implementation 'io.spring.gradle:dependency-management-plugin'
implementation 'org.apache.commons:commons-compress'
implementation 'org.springframework:spring-core'
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50'
testImplementation 'org.junit.jupiter:junit-jupiter'

@ -2,7 +2,6 @@ plugins {
id 'java-library'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Loader Tools'
@ -14,11 +13,11 @@ configurations {
}
dependencies {
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api "org.apache.commons:commons-compress:1.19"
compileOnly "ch.qos.logback:logback-classic"
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
implementation "org.springframework:spring-core"
loader project(":spring-boot-project:spring-boot-tools:spring-boot-loader")

@ -2,16 +2,15 @@ plugins {
id 'java-library'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Loader'
dependencies {
api platform(project(":spring-boot-project:spring-boot-dependencies"))
compileOnly "org.springframework:spring-core"
implementation enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies"))
testImplementation project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")
testImplementation "org.assertj:assertj-core"

@ -2,7 +2,6 @@ plugins {
id 'org.asciidoctor.jvm.convert'
id 'org.asciidoctor.jvm.pdf'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.maven-plugin'
id 'org.springframework.boot.optional-dependencies'
}
@ -14,25 +13,25 @@ configurations {
}
dependencies {
api platform(project(':spring-boot-project:spring-boot-parent'))
compileOnly 'org.apache.maven.plugin-tools:maven-plugin-annotations'
compileOnly 'org.sonatype.plexus:plexus-build-api'
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
implementation 'org.apache.maven.shared:maven-common-artifact-filters'
implementation 'org.apache.maven:maven-plugin-api'
intTestImplementation platform(project(':spring-boot-project:spring-boot-parent'))
intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
intTestImplementation 'org.apache.maven.shared:maven-invoker'
intTestImplementation 'org.assertj:assertj-core'
intTestImplementation 'org.junit.jupiter:junit-jupiter'
optional platform(project(':spring-boot-project:spring-boot-parent'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
optional 'org.apache.maven.plugins:maven-shade-plugin'
runtimeOnly 'org.sonatype.plexus:plexus-build-api'
testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent'))
testImplementation 'org.assertj:assertj-core'
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.mockito:mockito-core'

@ -1,14 +1,11 @@
plugins {
id 'java-library'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Testing Support'
dependencies {
api platform(project(path: ":spring-boot-project:spring-boot-parent"))
compileOnly "com.datastax.oss:java-driver-core"
compileOnly "javax.servlet:javax.servlet-api"
compileOnly "junit:junit"
@ -20,6 +17,7 @@ dependencies {
compileOnly "org.springframework.data:spring-data-redis"
compileOnly "org.testcontainers:testcontainers"
implementation enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent"))
implementation "org.apache.maven.resolver:maven-resolver-connector-basic"
implementation "org.apache.maven.resolver:maven-resolver-impl"
implementation "org.apache.maven:maven-resolver-provider"

@ -4,22 +4,21 @@ plugins {
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.configuration-properties'
id 'org.springframework.boot.deployed'
id 'org.springframework.boot.internal-dependency-management'
id 'org.springframework.boot.optional-dependencies'
}
description = 'Spring Boot'
dependencies {
annotationProcessor platform(project(':spring-boot-project:spring-boot-dependencies'))
annotationProcessor enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
annotationProcessor 'org.apache.logging.log4j:log4j-core'
api platform(project(':spring-boot-project:spring-boot-dependencies'))
api 'org.springframework:spring-core'
api 'org.springframework:spring-context'
optional platform(project(':spring-boot-project:spring-boot-dependencies'))
implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
optional 'ch.qos.logback:logback-classic'
optional 'com.atomikos:transactions-jdbc'
optional 'com.atomikos:transactions-jms'

@ -29,7 +29,7 @@ dependencies {
testRepository project(path: ':spring-boot-project:spring-boot-tools:spring-boot-loader', configuration: 'mavenRepository')
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter', configuration: 'mavenRepository')
testImplementation platform(project(':spring-boot-project:spring-boot-dependencies'))
testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
testImplementation project(path: ':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
testImplementation 'org.assertj:assertj-core'
testImplementation 'org.junit.jupiter:junit-jupiter'

@ -1,7 +1,6 @@
plugins {
id 'java'
id 'org.springframework.boot.conventions'
id 'org.springframework.boot.internal-dependency-management'
}
description = 'Spring Boot Atmosphere smoke test'

@ -8,18 +8,18 @@ description = 'Spring Boot Jetty JSP smoke test'
dependencies {
compileOnly 'jakarta.servlet:jakarta.servlet-api'
compileOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty')
implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) {
exclude module: 'spring-boot-starter-tomcat'
}
providedRuntime platform(project(':spring-boot-project:spring-boot-dependencies'))
providedRuntime enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
providedRuntime('org.eclipse.jetty:apache-jsp') {
exclude group: 'javax.annotation', module: 'javax.annotation-api'
}
runtimeOnly 'javax.servlet:jstl'
testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test')
testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty')
}

@ -10,7 +10,7 @@ dependencies {
exclude module: 'spring-boot-starter-tomcat'
}
providedCompile platform(project(':spring-boot-project:spring-boot-dependencies'))
providedCompile enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies'))
providedCompile 'jakarta.servlet:jakarta.servlet-api'
testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test')

Loading…
Cancel
Save