如何将kafka流的scala api定义为build.sbt中的依赖项?

f1tvaqid  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(409)

我正试图开始一个新的sbtscala项目,并有以下几点 build.sbt 文件:

name := "ScalaKafkaStreamsDemo"
version := "1.0"
scalaVersion := "2.12.1"

libraryDependencies += "javax.ws.rs" % "javax.ws.rs-api" % "2.1" artifacts(Artifact("javax.ws.rs-api", "jar", "jar"))

libraryDependencies += "org.apache.kafka" %% "kafka" % "2.0.0"
libraryDependencies += "org.apache.kafka" % "kafka-streams" % "2.0.0"

因此,根据github repo,在2.0.0中,我应该看到我想要使用的scala类/函数等,但是它们似乎不可用。在intellij内我可以打开 kafka-streams-2.0.0.jar ,但我没有看到任何scala类。
我还要加一个jar吗?
就在我们讨论额外jar的时候,有人知道我需要包括什么jar才能使用 EmbeddedKafkaCluster ?

dfuffjeb

dfuffjeb1#

看来你面临着一个悬而未决的问题 javax.ws.rs-api 一些java项目发生的依赖关系是使用sbt的scala项目的直接或可传递依赖关系。我遇到过使用apachespark的scala项目,最近遇到过kafka流(有和没有scalaapi)。
对我来说,一个很好的解决方法就是简单地排除依赖项,然后再次显式地定义它。

excludeDependencies += ExclusionRule("javax.ws.rs", "javax.ws.rs-api")
libraryDependencies += "javax.ws.rs" % "javax.ws.rs-api" % "2.1.1"

请确保您使用的是最新和最强大的sbt(即截至本文撰写时的1.2.7)。
也就是说,在 build.sbt 应如下所示:

scalaVersion := "2.12.8"

val kafkaVer = "2.1.0"
libraryDependencies += "org.apache.kafka" % "kafka-streams" % kafkaVer
libraryDependencies += "org.apache.kafka" %% "kafka-streams-scala" % kafkaVer

excludeDependencies += ExclusionRule("javax.ws.rs", "javax.ws.rs-api")
libraryDependencies += "javax.ws.rs" % "javax.ws.rs-api" % "2.1.1"

在intellij内我可以打开 kafka-streams-2.0.0.jar ,但我没有看到任何scala类。我还要加一个jar吗?
您只需要以下依赖项:

libraryDependencies += "org.apache.kafka" %% "kafka-streams-scala" % kafkaVer
bq9c1y66

bq9c1y662#

您需要的工件是kafka streams scala:

libraryDependencies += "org.apache.kafka" %% "kafka-streams-scala" % "2.0.1"

(请使用2.0.1或更好的2.1.0,因为2.0.0有一些scala api错误)
为了回答后一个问题,它在测试jar中,您可以使用分类器来解决这个问题:

libraryDependencies += "org.apache.kafka" %% "kafka-streams" % "2.0.1" % "test" classifier "test"

但请注意,这是一个内部类,可能会在不另行通知的情况下进行更改(或删除)。如果可能,强烈建议您在test utils中使用topologytestdriver:

libraryDependencies += "org.apache.kafka" %% "kafka-streams-test-utils" % "2.0.1" % "test"
mefy6pfw

mefy6pfw3#

您还可以使用以下解决方法,这在我的情况下是有效的-这里有更多详细信息

import sbt._
object PackagingTypePlugin extends AutoPlugin {
  override val buildSettings = {
    sys.props += "packaging.type" -> "jar"
    Nil
  }
}

相关问题