如何在build.sbt中将Scaf API for Kafka Streams定义为依赖项?

时间:2018-12-11 22:22:09

标签: scala apache-kafka apache-kafka-streams kafka-streams-scala

我正在尝试启动一个新的SBT Scala项目,并且在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

3 个答案:

答案 0 :(得分:7)

您需要的工件是kafka-streams-scala:

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

(请使用2.0.1,甚至更好的2.1.0,因为2.0.0有一些scala API错误)

要回答后一个问题,它位于测试罐中,您可以使用分类器解决该问题:

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

但是请注意,这是一个内部类,如有更改,恕不另行通知。如果可能的话,强烈建议您在测试实用程序中使用TopologyTestDriver代替:

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

答案 1 :(得分:2)

似乎您面临着未解决的func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: EventCommentsCustom = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! EventCommentsCustom guard let release = array[exist: indexPath.section] else { return cell } if release.user == "condition" { let image = UIImage() let imageView = UIImageView(image: image) imageView.sd_setImage(with: URL(string: "https://example.com/" + TegKeychain.get("profile_pic")!)) imageView.frame = CGRect(x: 20, y: 10, width: 50, height:50) imageView.layer.borderWidth = 0.4 imageView.layer.masksToBounds = false imageView.layer.borderColor = UIColor.gray.cgColor imageView.layer.cornerRadius = 25 imageView.clipsToBounds = true imageView.tag = 3 cell.addSubview(imageView) let button = UIButton(frame: CGRect(x: 90, y: 10, width: 200, height: 50)) button.contentHorizontalAlignment = .left button.setTitleColor(UIColor.lightGray, for: .normal) button.setTitle(NSLocalizedString("Say something...", comment: ""), for: .normal) button.addTarget(self, action: #selector(EventComments.openInput), for: .touchUpInside) button.tag = 3 cell.addSubview(button) } else { if let viewWithTag = cell.viewWithTag(3) { if viewWithTag is UIImageView { print("DONE") viewWithTag.removeFromSuperview() } } if let viewWithTag = cell.viewWithTag(3) { if viewWithTag is UIButton { print("DONE") viewWithTag.removeFromSuperview() } } } return cell } 依赖性问题,该问题发生在某些Java项目中,这些Java项目是使用sbt的Scala项目的直接或可移植依赖性。我在使用Apache Spark的Scala项目以及最近在Kafka Streams(带有和不带有Scala API)中遇到过这种情况。

一种对我有效的解决方法是简单地排除依赖项,然后再次明确定义它。

javax.ws.rs-api

确保使用sbt的最新版本和最新版本(即,撰写本文时为 1.2.7 )。

话虽如此,excludeDependencies += ExclusionRule("javax.ws.rs", "javax.ws.rs-api") libraryDependencies += "javax.ws.rs" % "javax.ws.rs-api" % "2.1.1" 中的依赖项应如下:

build.sbt

  

在IntelliJ中,我可以打开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" ,但没有看到任何Scala类。我需要添加另一个JAR吗?

您需要的依赖项如下:

kafka-streams-2.0.0.jar

答案 2 :(得分:0)

您还可以使用以下变通方法,这种变通方法适用于我的情况-更多详细信息 here

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