我使用 IntelliJ IDEA 本身和 SBT 为在 Scala 中编码的 Kafka Streams 应用程序制作了一个 jar 文件。以下是我一直面临的问题,到目前为止我还没有成功:
首先,我使用 IntelliJ IDEA 制作了一个 jar 文件。在运行 Jar 文件时,它给出了以下错误:
java.lang.ClassNotFoundException: Main ...
以下是我在 IntelliJ IDEA 中制作 Jar 文件的步骤:
之后我尝试使用 SBT 制作 Jar 文件。我在项目目录中创建了一个 assembly.sbt 文件,然后我重新导入了该项目。之后,我执行了以下命令:
它制作了一个 Jar 文件。这一次,问题在于它没有随机选择一些 Kafka 库。有时,它会抛出,例如,未找到 KafkaStreams。然后我将尝试重建 jar,然后新 jar 会抛出 StreamsBuilder not found。我一直在尝试和总结,以下是我记得的一些错误:
NoClassDefFoundException ..../KafkaStreams
NoClassDefFoundException ..../StreamsBuilder etc.
这里的“...”表示完整的包名称/路径。
构建.sbt:
name := "StreamsNew"
version := "0.1"
scalaVersion := "2.12.7"
mainClass := Some("src/main/scala/StreamsDemo/Main.scala")
libraryDependencies ++= Seq(
//"org.slf4j" % "slf4j-simple" % "1.7.28",
"org.apache.kafka" % "kafka-streams" % "2.3.0",
"org.apache.kafka" %% "kafka-streams-scala" % "2.3.0",
)
程序集.sbt:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10" )
resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
斯卡拉版本:2.12.7
SBT 版本:1.6.3
请您参考如下方法:
您不需要使用 sbt package ,因为您需要一个胖 jar(用于依赖项)。为此,您只需要执行 sbt clean和 sbt assembly .更重要的是,主类路径应该只包含 StreamsDemo.Main而不是整个路径。现在,尝试运行通过组装制作的 jar。此外,您不需要 assembly.sbt 中的解析器。

