I have an SBT project with Scala 2.12, with "za.co.absa" %% abris %% "4.2.0"
as one of the dependencies. Transitively it brings kafka-clients dependency of version 5.3.4-css.
At the same time for tests I'm using embedded-kafka
dependency: "io.github.embeddedkafka" %% "embedded-kafka" % "3.4.0" % Test
. And tests are failing with errors (stack trace example):
java.lang.NoSuchMethodError: org.apache.kafka.common.utils.Utils.enumOptions(Ljava/lang/Class;)[Ljava/lang/String;
[info] at kafka.server.KafkaConfig$.<init>(KafkaConfig.scala:1288)
[info] at kafka.server.KafkaConfig$.<clinit>(KafkaConfig.scala)
[info] at io.github.embeddedkafka.ops.KafkaOps.startKafka(kafkaOps.scala:34)
[info] at io.github.embeddedkafka.ops.KafkaOps.startKafka$(kafkaOps.scala:24)
[info] at io.github.embeddedkafka.EmbeddedKafka$.startKafka(EmbeddedKafka.scala:52)
[info] at io.github.embeddedkafka.ops.RunningKafkaOps.startKafka(kafkaOps.scala:82)
[info] at io.github.embeddedkafka.ops.RunningKafkaOps.startKafka$(kafkaOps.scala:75)
[info] at io.github.embeddedkafka.EmbeddedKafka$.startKafka(EmbeddedKafka.scala:52)
[info] at io.github.embeddedkafka.EmbeddedKafka$.start(EmbeddedKafka.scala:70)
[info] at com.careem.pi.optimus.jobs.BaseJobTest.beforeAll(BaseJobTest.scala:32)
Using dependencyTree I've figured out that kafka-clients
is also a dependency coming from embedded-kafka
with a different version, but it's overriden by dependency coming from abris
:
┆ [info] | | +-org.apache.kafka:kafka-clients:3.4.0 (evicted by: 5.3.4-ccs)
┆ [info] | | +-org.apache.kafka:kafka-clients:5.3.4-ccs
Can I force SBT for using 3.4.0 version of kafka-clients
for the Test scope, and 5.3.4-ccs version for the Compile scope?