Update to Spring Boot 3.4.1
This commit updates the following dependencies: - Spring Boot to 3.4.2-SNAPSHOT - Spring Cloud 2024.0.1-SNAPSHOT - Spring Functions Catalog 5.1.0-SNAPSHOT Also removes these unnecessary version properties: - spring-cloud-stream.version - spring-cloud-function.version - spring-cloud-starters.version Also removes dependency mgmt for the following: - testcontainers-bom - junit-bom - jakarta-jms-api - groovy-bom Resolves #599 #600 * Remove Debezium Avro integration tests This commit removes the DebeziumSupplierAvroFormatTest as it relies on a dependency that has been removed in Spring Integration and stream-applications. We should not need to test Debezium support for Avro encoding.
This commit is contained in:
@@ -33,19 +33,16 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>elasticsearch</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -32,14 +32,8 @@ import org.testcontainers.utility.DockerImageName;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.cloud.fn.consumer.elasticsearch.ElasticsearchConsumerConfiguration;
|
||||
import org.springframework.cloud.stream.binder.test.InputDestination;
|
||||
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.elasticsearch.client.ClientConfiguration;
|
||||
import org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.messaging.support.GenericMessage;
|
||||
|
||||
|
||||
@@ -59,24 +53,20 @@ public class ElasticsearchSinkTests {
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withUserConfiguration(TestChannelBinderConfiguration.getCompleteConfiguration(ElasticsearchSinkTestApplication.class));
|
||||
|
||||
|
||||
@Test
|
||||
void elasticSearchSinkWithIndexNameProperty() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.cloud.function.definition=elasticsearchConsumer",
|
||||
"elasticsearch.consumer.index=foo", "elasticsearch.consumer.id=1",
|
||||
"spring.elasticsearch.rest.uris=http://" + elasticsearch.getHttpHostAddress())
|
||||
"spring.elasticsearch.uris=http://" + elasticsearch.getHttpHostAddress())
|
||||
.run(context -> {
|
||||
|
||||
final InputDestination inputDestination = context.getBean(InputDestination.class);
|
||||
final String jsonObject = "{\"age\":10,\"dateOfBirth\":1471466076564,"
|
||||
InputDestination inputDestination = context.getBean(InputDestination.class);
|
||||
String jsonObject = "{\"age\":10,\"dateOfBirth\":1471466076564,"
|
||||
+ "\"fullName\":\"John Doe\"}";
|
||||
|
||||
inputDestination.send(new GenericMessage<>(jsonObject));
|
||||
|
||||
final ElasticsearchClient elasticsearchClient = context.getBean(ElasticsearchClient.class);
|
||||
final GetRequest getRequest = new GetRequest.Builder().index("foo").id("1").build();
|
||||
final GetResponse<JsonData> response = elasticsearchClient.get(getRequest, JsonData.class);
|
||||
ElasticsearchClient elasticsearchClient = context.getBean(ElasticsearchClient.class);
|
||||
GetRequest getRequest = new GetRequest.Builder().index("foo").id("1").build();
|
||||
GetResponse<JsonData> response = elasticsearchClient.get(getRequest, JsonData.class);
|
||||
assertThat(response.found()).isTrue();
|
||||
assertThat(response.source()).isNotNull();
|
||||
assertThat(response.source().toJson()).isEqualTo(JsonData.fromJson(jsonObject).toJson());
|
||||
@@ -87,7 +77,7 @@ public class ElasticsearchSinkTests {
|
||||
void elasticSearchSinkWithIndexNameFromHeader() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.cloud.function.definition=elasticsearchConsumer", "elasticsearch.consumer.id=1",
|
||||
"spring.elasticsearch.rest.uris=http://" + elasticsearch.getHttpHostAddress())
|
||||
"spring.elasticsearch.uris=http://" + elasticsearch.getHttpHostAddress())
|
||||
.run(context -> {
|
||||
|
||||
final InputDestination inputDestination = context.getBean(InputDestination.class);
|
||||
@@ -106,19 +96,7 @@ public class ElasticsearchSinkTests {
|
||||
}
|
||||
|
||||
@SpringBootApplication
|
||||
@Import(ElasticsearchConsumerConfiguration.class)
|
||||
static class ElasticsearchSinkTestApplication {
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class Config extends ElasticsearchConfiguration {
|
||||
@NonNull
|
||||
@Override
|
||||
public ClientConfiguration clientConfiguration() {
|
||||
return ClientConfiguration.builder()
|
||||
.connectedTo(elasticsearch.getHttpHostAddress())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -23,19 +23,16 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||
<version>${spring-cloud-starters.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
/*
|
||||
* Copyright 2023-2023 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.cloud.stream.app.source.debezium.integration;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.cloud.stream.binder.test.OutputDestination;
|
||||
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.messaging.Message;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* @author Christian Tzolov
|
||||
*/
|
||||
@Tag("integration")
|
||||
@Testcontainers
|
||||
public class DebeziumSupplierAvroFormatTest {
|
||||
|
||||
// E.g. docker run -it --rm --name apicurio -p 8080:8080 apicurio/apicurio-registry-mem:2.4.1.Final
|
||||
@Container
|
||||
static GenericContainer<?> apicurio = new GenericContainer<>("apicurio/apicurio-registry-mem:2.4.1.Final")
|
||||
.withExposedPorts(8080)
|
||||
.withStartupTimeout(Duration.ofSeconds(120))
|
||||
.withStartupAttempts(3);
|
||||
|
||||
@Container
|
||||
static GenericContainer<?> debeziumMySQL = new GenericContainer<>(DebeziumTestUtils.DEBEZIUM_EXAMPLE_MYSQL_IMAGE)
|
||||
.withEnv("MYSQL_ROOT_PASSWORD", "debezium")
|
||||
.withEnv("MYSQL_USER", "mysqluser")
|
||||
.withEnv("MYSQL_PASSWORD", "mysqlpw")
|
||||
.withExposedPorts(3306)
|
||||
.withStartupTimeout(Duration.ofSeconds(120))
|
||||
.withStartupAttempts(3);
|
||||
|
||||
private final SpringApplicationBuilder applicationBuilder = new SpringApplicationBuilder(
|
||||
TestChannelBinderConfiguration.getCompleteConfiguration(TestDebeziumSourceApplication.class))
|
||||
.web(WebApplicationType.NONE)
|
||||
.properties(
|
||||
"spring.cloud.function.definition=debeziumSupplier",
|
||||
|
||||
"debezium.payloadFormat=AVRO",
|
||||
|
||||
"debezium.properties.key.converter=io.apicurio.registry.utils.converter.AvroConverter",
|
||||
"debezium.properties.key.converter.apicurio.registry.auto-register=true",
|
||||
"debezium.properties.key.converter.apicurio.registry.find-latest=true",
|
||||
"debezium.properties.value.converter=io.apicurio.registry.utils.converter.AvroConverter",
|
||||
"debezium.properties.value.converter.apicurio.registry.auto-register=true",
|
||||
"debezium.properties.value.converter.apicurio.registry.find-latest=true",
|
||||
"debezium.properties.schema.name.adjustment.mode=avro",
|
||||
|
||||
"debezium.properties.schema.history.internal=io.debezium.relational.history.MemorySchemaHistory",
|
||||
"debezium.properties.offset.storage=org.apache.kafka.connect.storage.MemoryOffsetBackingStore",
|
||||
|
||||
"debezium.properties.topic.prefix=my-topic",
|
||||
"debezium.properties.name=my-connector",
|
||||
"debezium.properties.database.server.id=85744",
|
||||
|
||||
"debezium.properties.connector.class=io.debezium.connector.mysql.MySqlConnector",
|
||||
"debezium.properties.database.user=debezium",
|
||||
"debezium.properties.database.password=dbz",
|
||||
"debezium.properties.database.hostname=localhost",
|
||||
|
||||
// JdbcTemplate configuration
|
||||
String.format("app.datasource.url=jdbc:mysql://localhost:%d/%s?enabledTLSProtocols=TLSv1.2",
|
||||
debeziumMySQL.getMappedPort(3306), DebeziumTestUtils.DATABASE_NAME),
|
||||
"app.datasource.username=root",
|
||||
"app.datasource.password=debezium",
|
||||
"app.datasource.driver-class-name=com.mysql.cj.jdbc.Driver",
|
||||
"app.datasource.type=com.zaxxer.hikari.HikariDataSource");
|
||||
|
||||
@Test
|
||||
public void mysqlWithAvroContentFormat() {
|
||||
|
||||
String MYSQL_MAPPED_PORT = String.valueOf(debeziumMySQL.getMappedPort(3306));
|
||||
String APICURIO_URL = "http://localhost:" + String.valueOf(apicurio.getMappedPort(8080)) + "/apis/registry/v2";
|
||||
|
||||
try (ConfigurableApplicationContext context = applicationBuilder.run(
|
||||
"--debezium.properties.key.converter.apicurio.registry.url=" + APICURIO_URL,
|
||||
"--debezium.properties.value.converter.apicurio.registry.url=" + APICURIO_URL,
|
||||
"--debezium.properties.database.port=" + MYSQL_MAPPED_PORT)) {
|
||||
|
||||
OutputDestination outputDestination = context.getBean(OutputDestination.class);
|
||||
|
||||
// Using local region here
|
||||
List<Message<?>> messages = DebeziumTestUtils.receiveAll(outputDestination);
|
||||
|
||||
assertThat(messages).isNotNull();
|
||||
// Message size should correspond to the number of insert statements in the sample inventor DB
|
||||
// configured by:
|
||||
// https://github.com/debezium/container-images/blob/main/examples/mysql/2.1/inventory.sql
|
||||
assertThat(messages).hasSizeGreaterThanOrEqualTo(52);
|
||||
// assertThat(messages).map(message ->
|
||||
// message.getHeaders().get("contentType")).isEqualTo("application/avro"); // TEST utils bug.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,6 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.cloud.stream.app.source.websocket;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -37,7 +38,6 @@ import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.integration.websocket.ClientWebSocketContainer;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.util.Base64Utils;
|
||||
import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
|
||||
@@ -73,7 +73,7 @@ public class WebsocketSourceTests {
|
||||
this.properties.getPath());
|
||||
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
String token = Base64Utils.encodeToString(
|
||||
String token = Base64.getEncoder().encodeToString(
|
||||
(this.securityProperties.getUser().getName() + ":" + this.securityProperties.getUser().getPassword())
|
||||
.getBytes(StandardCharsets.UTF_8));
|
||||
httpHeaders.set(HttpHeaders.AUTHORIZATION, "Basic " + token);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
<properties>
|
||||
<stream-apps-core.version>6.0.0-SNAPSHOT</stream-apps-core.version>
|
||||
<java-functions.version>5.0.1</java-functions.version>
|
||||
<java-functions.version>5.1.0-SNAPSHOT</java-functions.version>
|
||||
<prometheus-rsocket.version>1.5.3</prometheus-rsocket.version>
|
||||
<spring-cloud-dataflow-apps-generator-plugin.version>1.1.0-SNAPSHOT</spring-cloud-dataflow-apps-generator-plugin.version>
|
||||
<spring-cloud-dataflow-apps-docs-plugin.version>1.1.0-SNAPSHOT</spring-cloud-dataflow-apps-docs-plugin.version>
|
||||
@@ -42,38 +42,12 @@
|
||||
<version>${java-functions.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-function-dependencies</artifactId>
|
||||
<version>${spring-cloud-function.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-stream-dependencies</artifactId>
|
||||
<version>${spring-cloud-stream-dependencies.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mock-server</groupId>
|
||||
<artifactId>mockserver-netty</artifactId>
|
||||
<version>${mockserver.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit</groupId>
|
||||
<artifactId>junit-bom</artifactId>
|
||||
<version>5.9.3</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers-bom</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
@@ -169,17 +143,6 @@
|
||||
</metadata>
|
||||
<maven>
|
||||
<dependencyManagement>
|
||||
<!-- Temporarily override SC-Fn dependency by giving it the highest precedence since 2020.0.5 release of spring-cloud will not take place until December -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-function-dependencies</artifactId>
|
||||
<version>${spring-cloud-function.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-stream-dependencies</artifactId>
|
||||
<version>${spring-cloud-stream-dependencies.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies</artifactId>
|
||||
|
||||
@@ -101,7 +101,6 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>localstack</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -35,26 +35,26 @@
|
||||
<nohttp-checkstyle.version>0.0.11</nohttp-checkstyle.version>
|
||||
<disable.nohttp.checks>true</disable.nohttp.checks>
|
||||
<spring-javaformat-checkstyle.version>0.0.43</spring-javaformat-checkstyle.version>
|
||||
<spring-boot.version>3.3.6</spring-boot.version>
|
||||
<spring.version>6.1.15</spring.version>
|
||||
<spring-cloud.version>2023.0.4</spring-cloud.version>
|
||||
<spring-cloud-starters.version>4.1.5</spring-cloud-starters.version>
|
||||
<spring-cloud-function.version>4.1.4</spring-cloud-function.version>
|
||||
<spring-cloud-stream-dependencies.version>4.1.4</spring-cloud-stream-dependencies.version>
|
||||
<testcontainers.version>1.19.8</testcontainers.version>
|
||||
<spring-boot.version>3.4.2-SNAPSHOT</spring-boot.version>
|
||||
<spring-cloud.version>2024.0.1-SNAPSHOT</spring-cloud.version>
|
||||
<!-- =================================================================== -->
|
||||
<!-- Required only for release train docs generation in -->
|
||||
<!-- /stream-applications-release-train/stream-applications-docs/pom.xml -->
|
||||
<spring.version>6.2.1</spring.version>
|
||||
<spring-cloud-stream-dependencies.version>4.2.1-SNAPSHOT</spring-cloud-stream-dependencies.version>
|
||||
<!-- =================================================================== -->
|
||||
<mockserver.version>5.15.0</mockserver.version>
|
||||
<groovy.version>4.0.24</groovy.version>
|
||||
<apache-ivy.version>2.5.2</apache-ivy.version>
|
||||
<jakarta-jms.version>3.1.0</jakarta-jms.version>
|
||||
<curator.version>5.5.0</curator.version>
|
||||
<mavenThreads>1</mavenThreads>
|
||||
<commons-compress.version>1.26.2</commons-compress.version>
|
||||
<commons-lang3.version>3.17.0</commons-lang3.version>
|
||||
<!--suppress UnresolvedMavenProperty -->
|
||||
<buildName>${env.BUILD_NAME}</buildName>
|
||||
<!--suppress UnresolvedMavenProperty -->
|
||||
<buildNumber>${env.BUILD_NUMBER}</buildNumber>
|
||||
</properties>
|
||||
<okhttp3.version>4.12.0</okhttp3.version>
|
||||
<!--suppress UnresolvedMavenProperty -->
|
||||
<buildName>${env.BUILD_NAME}</buildName>
|
||||
<!--suppress UnresolvedMavenProperty -->
|
||||
<buildNumber>${env.BUILD_NUMBER}</buildNumber>
|
||||
</properties>
|
||||
|
||||
<url>https://spring.io/projects/spring-cloud-stream-applications</url>
|
||||
<developers>
|
||||
@@ -82,12 +82,6 @@
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-framework-bom</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
@@ -102,37 +96,18 @@
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-function-dependencies</artifactId>
|
||||
<version>${spring-cloud-function.version}</version>
|
||||
<scope>import</scope>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers-bom</artifactId>
|
||||
<version>${testcontainers.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.groovy</groupId>
|
||||
<artifactId>groovy-bom</artifactId>
|
||||
<version>${groovy.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.jms</groupId>
|
||||
<artifactId>jakarta.jms-api</artifactId>
|
||||
<version>${jakarta-jms.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ivy</groupId>
|
||||
<artifactId>ivy</artifactId>
|
||||
<version>${apache-ivy.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp-bom</artifactId>
|
||||
<version>${okhttp3.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user