Scala Jar 文件无法为 Kafka Streams 应用程序正常工作
Scala Jar file not working properly for Kafka Streams app
我使用 IntelliJ IDEA 本身和 SBT 为用 Scala 编码的 Kafka Streams 应用程序制作了一个 jar 文件。以下是我一直面临的问题,到目前为止我还没有成功:
首先,我使用 IntelliJ IDEA 制作了一个 jar 文件。在 运行 Jar 文件上,它给出了以下错误:
java.lang.ClassNotFoundException: Main ...
以下是我在 IntelliJ IDEA 中制作 Jar 文件的步骤:
- 从文件菜单中选择了项目结构。
- 进入 'Artifacts' 选项卡。
- 点击了 + 按钮。
- 选择了主要 class 和 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 etc.
此处'...'表示完整包name/path。
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
您不需要使用 sbt package
,因为您需要一个 fat jar(用于依赖项)。为此,您只需要执行 sbt clean
和 sbt assembly
。更重要的是,主 class 路径应该只包含 StreamsDemo.Main
而不是整个路径。现在,试试运行组装出来的罐子。此外,您不需要 assembly.sbt.
中的解析器
我使用 IntelliJ IDEA 本身和 SBT 为用 Scala 编码的 Kafka Streams 应用程序制作了一个 jar 文件。以下是我一直面临的问题,到目前为止我还没有成功:
首先,我使用 IntelliJ IDEA 制作了一个 jar 文件。在 运行 Jar 文件上,它给出了以下错误:
java.lang.ClassNotFoundException: Main ...
以下是我在 IntelliJ IDEA 中制作 Jar 文件的步骤:
- 从文件菜单中选择了项目结构。
- 进入 'Artifacts' 选项卡。
- 点击了 + 按钮。
- 选择了主要 class 和 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 etc.
此处'...'表示完整包name/path。
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
您不需要使用 sbt package
,因为您需要一个 fat jar(用于依赖项)。为此,您只需要执行 sbt clean
和 sbt assembly
。更重要的是,主 class 路径应该只包含 StreamsDemo.Main
而不是整个路径。现在,试试运行组装出来的罐子。此外,您不需要 assembly.sbt.