Skip to content

Commit f282a9a

Browse files
authored
Dependency hygiene required by Spring Boot (#376)
1 parent 29cfd30 commit f282a9a

File tree

7 files changed

+33
-6
lines changed

7 files changed

+33
-6
lines changed

spring-pulsar-reactive/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,23 @@ description = 'Spring Pulsar Reactive Support'
66

77
dependencies {
88
api project (':spring-pulsar')
9-
api 'org.apache.pulsar:pulsar-client-reactive-adapter'
9+
api ('org.apache.pulsar:pulsar-client-reactive-adapter') {
10+
// remove when reactive client updates to 2.11
11+
exclude group: 'org.apache.pulsar', module: 'pulsar-client'
12+
}
1013
implementation 'com.fasterxml.jackson.core:jackson-core'
1114
implementation 'com.fasterxml.jackson.core:jackson-databind'
1215
implementation 'com.google.code.findbugs:jsr305'
1316
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
1417
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
1518
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
19+
optional 'com.google.protobuf:protobuf-java'
1620
optional 'com.jayway.jsonpath:json-path'
1721
optional 'io.projectreactor:reactor-core'
22+
optional ('org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine') {
23+
// remove when reactive client updates to 2.11
24+
exclude group: 'org.apache.pulsar', module: 'pulsar-client-reactive-adapter'
25+
}
1826

1927
testImplementation project(':spring-pulsar-test')
2028
testRuntimeOnly 'ch.qos.logback:logback-classic'

spring-pulsar-spring-boot-autoconfigure/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies {
1212

1313
optional project (':spring-pulsar')
1414
optional project (':spring-pulsar-reactive')
15+
optional 'com.github.ben-manes.caffeine:caffeine'
1516
optional 'org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine'
1617
implementation 'org.springframework.boot:spring-boot-starter'
1718
implementation 'com.google.code.findbugs:jsr305'

spring-pulsar-spring-boot-autoconfigure/src/main/java/org/springframework/pulsar/autoconfigure/PulsarAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.springframework.pulsar.function.PulsarSource;
5252
import org.springframework.pulsar.observation.PulsarTemplateObservationConvention;
5353

54+
import com.github.benmanes.caffeine.cache.Caffeine;
5455
import io.micrometer.observation.ObservationRegistry;
5556

5657
/**
@@ -88,6 +89,7 @@ public PulsarProducerFactory<?> pulsarProducerFactory(PulsarClient pulsarClient,
8889

8990
@Bean
9091
@ConditionalOnMissingBean
92+
@ConditionalOnClass(Caffeine.class)
9193
@ConditionalOnProperty(name = "spring.pulsar.producer.cache.enabled", havingValue = "true", matchIfMissing = true)
9294
public PulsarProducerFactory<?> cachingPulsarProducerFactory(PulsarClient pulsarClient,
9395
TopicResolver topicResolver) {

spring-pulsar-spring-boot-autoconfigure/src/test/java/org/springframework/pulsar/autoconfigure/PulsarAutoConfigurationTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.junit.jupiter.api.Nested;
3636
import org.junit.jupiter.api.Test;
3737

38+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
3839
import org.springframework.boot.autoconfigure.AutoConfigurations;
3940
import org.springframework.boot.test.context.FilteredClassLoader;
4041
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
@@ -68,6 +69,7 @@
6869
import org.springframework.pulsar.observation.PulsarListenerObservationConvention;
6970
import org.springframework.pulsar.observation.PulsarTemplateObservationConvention;
7071

72+
import com.github.benmanes.caffeine.cache.Caffeine;
7173
import io.micrometer.observation.ObservationRegistry;
7274

7375
/**
@@ -498,6 +500,17 @@ void cachingProducerFactoryCanBeEnabled() {
498500
.run((context -> assertHasProducerFactoryOfType(CachingPulsarProducerFactory.class, context)));
499501
}
500502

503+
@Test
504+
void cachingEnabledButCaffeineNotOnClasspath() {
505+
contextRunner.withClassLoader(new FilteredClassLoader(Caffeine.class))
506+
.withPropertyValues("spring.pulsar.producer.cache.enabled=true")
507+
.run((context -> assertThat(context).hasFailed().getFailure().cause()
508+
.isInstanceOf(NoSuchBeanDefinitionException.class)
509+
.asInstanceOf(InstanceOfAssertFactories.type(NoSuchBeanDefinitionException.class))
510+
.extracting(NoSuchBeanDefinitionException::getBeanType)
511+
.isEqualTo(PulsarProducerFactory.class)));
512+
}
513+
501514
@Test
502515
void cachingProducerFactoryCanBeConfigured() {
503516
contextRunner

spring-pulsar-spring-boot-starter/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ description = 'Spring Pulsar Spring Boot Starter'
77
dependencies {
88
api project (':spring-pulsar')
99
api project (':spring-pulsar-spring-boot-autoconfigure')
10+
api 'com.github.ben-manes.caffeine:caffeine'
1011
api 'org.springframework.boot:spring-boot-starter'
1112
}

spring-pulsar/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ plugins {
55
description = 'Spring Pulsar Support'
66

77
dependencies {
8-
api 'com.github.ben-manes.caffeine:caffeine'
9-
api 'com.google.protobuf:protobuf-java'
108
api 'io.micrometer:micrometer-observation'
119
api ('org.apache.pulsar:pulsar-client-all') {
1210
exclude group: 'org.apache.logging.log4j'
11+
exclude group: 'com.sun.activation', module: 'javax.activation'
12+
exclude group: 'javax.validation', module: 'validation-api'
1313
}
1414
api 'org.springframework:spring-context'
1515
api 'org.springframework:spring-messaging'
@@ -23,6 +23,8 @@ dependencies {
2323
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
2424
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
2525
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
26+
optional 'com.github.ben-manes.caffeine:caffeine'
27+
optional 'com.google.protobuf:protobuf-java'
2628
optional 'com.jayway.jsonpath:json-path'
2729

2830
testImplementation project(':spring-pulsar-test')

spring-pulsar/src/main/java/org/springframework/pulsar/core/DefaultSchemaResolver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@
4242
import org.springframework.core.log.LogAccessor;
4343
import org.springframework.lang.Nullable;
4444

45-
import com.google.protobuf.GeneratedMessageV3;
46-
4745
/**
4846
* Default schema resolver capable of handling basic message types.
4947
*
@@ -178,8 +176,10 @@ public <T> Resolved<Schema<T>> resolveSchema(SchemaType schemaType, @Nullable Re
178176
case JSON -> JSONSchema.of(requireNonNullMessageType(schemaType, messageType));
179177
case AVRO -> AvroSchema.of(requireNonNullMessageType(schemaType, messageType));
180178
case PROTOBUF -> {
179+
// WARN! Leave GeneratedMessageV3 fully-qualified as the dependency is
180+
// optional
181181
Class<?> messageClass = requireNonNullMessageType(schemaType, messageType);
182-
yield ProtobufSchema.of((Class<? extends GeneratedMessageV3>) messageClass);
182+
yield ProtobufSchema.of((Class<? extends com.google.protobuf.GeneratedMessageV3>) messageClass);
183183
}
184184
case KEY_VALUE -> {
185185
requireNonNullMessageType(schemaType, messageType);

0 commit comments

Comments
 (0)