Scala Jar-файл не работает должным образом для приложения Kafka Streams - PullRequest
3 голосов
/ 23 января 2020

Я сделал jar-файл для приложения Kafka Streams, закодированный в Scala, используя как IntelliJ IDEA, так и SBT. Ниже приведены проблемы, с которыми я столкнулся, и до сих пор мне это не удалось:

Сначала я создал файл jar с помощью IntelliJ IDEA. После запуска файла Jar он выдал следующую ошибку:

java .lang.ClassNotFoundException: Main ...

Ниже приведены шаги, которые я предпринял, чтобы сделать файл Jar в IntelliJ IDEA:

  • Выбранная структура проекта из меню файлов.
  • Перешел на вкладку «Артефакты».
  • Нажал на кнопку +.
  • Выбран основной класс и расположение каталога META-INF
  • Добавлены все библиотеки и зависимости Scala (и убедитесь, что каталог META-INF включен)
  • Применил настройки и построил артефакт.
  • Запустите Jar с помощью команды Scala. Дали вышеупомянутую ошибку.

После этого я попытался сделать файл Jar с помощью SBT. Я сделал файл assembly.sbt внутри каталога проекта, а затем снова импортировал проект. После этого я выполнил следующие команды:

  • sbt clean
  • sbt package
  • sbt Assembly

Сделал файл Jar , На этот раз проблема заключалась в том, что некоторые библиотеки Кафки не выбирались случайным образом. Иногда, например, выкидывается, что KafkaStreams не найден. Затем я попытаюсь восстановить банку, и новая банка будет выбрасывать StreamsBuilder не найден. Я продолжал пытаться и подвести итог, вот некоторые из ошибок, которые я помню:

NoClassDefFoundException .... / KafkaStreams
NoClassDefFoundException .... / StreamsBuilder et c.

Здесь '...' означает полное имя пакета / путь.

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

1 Ответ

1 голос
/ 23 января 2020

Вам не нужно использовать sbt package, потому что вы хотите толстую банку (для зависимостей). Для этого вам нужно только выполнить sbt clean и sbt assembly. Более того, путь к основному классу должен содержать только StreamsDemo.Main вместо всего пути. Теперь попробуйте запустить банку, сделанную посредством сборки. Кроме того, вам не нужны преобразователи в сборке.

...