【发布时间】:2020-05-09 07:57:37
【问题描述】:
我使用 IntelliJ IDEA 本身和 SBT 为 Scala 编码的 Kafka Streams 应用程序制作了一个 jar 文件。以下是我一直面临的问题,到目前为止我还没有成功:
首先,我使用 IntelliJ IDEA 制作了一个 jar 文件。运行 Jar 文件时,出现以下错误:
java.lang.ClassNotFoundException: Main ...
以下是我在 IntelliJ IDEA 中制作 Jar 文件的步骤:
- 从文件菜单中选择项目结构。
- 进入“工件”标签。
- 点击了 + 按钮。
- 选择了主类和META-INF目录位置
- 添加了所有 Scala 库和依赖项(并确保包含 META-INF 目录)
- 应用设置并构建工件。
- 使用 Scala 命令运行 Jar。报了上述错误。
之后我尝试使用 SBT 制作 Jar 文件。我在项目目录中创建了一个 assembly.sbt 文件,然后我重新导入了该项目。之后,我执行了以下命令:
- sbt 清洁
- sbt 包
- sbt 汇编
它制作了一个 Jar 文件。这一次,问题在于它没有随机选择一些 Kafka 库。有时,它会抛出,例如,找不到 KafkaStreams。然后我会尝试重建 jar,然后新的 jar 会抛出 StreamsBuilder not found。我不断尝试并总结,以下是我记得的一些错误:
NoClassDefFoundException ..../KafkaStreams
NoClassDefFoundException ..../StreamsBuilder 等
这里的“...”表示完整的包名/路径。
build.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",
)
assembly.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)
Scala 版本:2.12.7
SBT 版本:1.6.3
【问题讨论】:
-
你可以单独在 IntelliJ 中运行应用程序吗?虽然 Scala 没有任何问题,但您需要使用它吗?大量带有 Gradle 的 Java 入门示例。 Kotlin 可以为您减少冗长。 SpringBoot 可以帮助你更快地得到一个可执行程序
-
@cricket_007 是的,它在 IntelliJ IDEA 中运行非常好。使用 Scala 是客户的要求,这就是原因。
-
我猜还有 sbt 吗?你能分享任何代码吗?
-
你可以运行
jar tf file.jar | grep kafka查看包中的是什么 -
请edit问题并适当地格式化代码
标签: scala intellij-idea apache-kafka sbt executable-jar