Связывание с модулями, не содержащимися в бинарном дистрибутиве при использовании sbt - PullRequest
0 голосов
/ 12 декабря 2018

Я разрабатываю приложение, используя scala 2.11 и apache-flink 1.6 .Это sbt проект, поэтому я не использую maven или gradle.

В качестве дополнительной зависимости я использую flink-connector-kafka-0.11.До сих пор я запускал приложение из IntelliJ , которое прекрасно работало.Теперь я хочу запустить свое приложение (локально), используя среду выполнения flink, как указано в документе flink doc:

14:37:59 mac:~/Development/flink> ./bin/flink run /path/to/myapp-assembly-0.1-SNAPSHOT.jar

Однако flink откажется запускаться, поскольку не может найти kafka зависимость:

java.lang.NoClassDefFoundError: org/apache/flink/streaming/connectors/kafka/FlinkKafkaConsumer011

После нескольких попыток я не могу найти решение, которое упаковывает банку кафки в мою сборку.Я уже удалил теги provided из build.sbt, вот так:

val flinkDependencies = Seq(
  "org.apache.flink"           %% "flink-scala"                % flinkVersion, // % "provided"
  "org.apache.flink"           %% "flink-streaming-scala"      % flinkVersion, // % "provided"
  "org.apache.flink"           %% "flink-connector-kafka-0.11" % flinkVersion, // % "provided"

, но мой файл jar все равно не будет содержать файл kafka. будет , однако будет включать все другие зависимости (slf4j, yoda time, scalalogging, ...), так что что-то приводит только к тому, что не будут включены зависимости flink.

Я создаю jar с помощьюsbt assembly предоставлено плагином sbt-assembly.

Теперь я думаю, что у меня есть та самая проблема, которая описана здесь: https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/linking.html

Однако нет описания для sbt-basedпроект, так что я не знаю, как это адаптировать.

Что мне нужно сделать, чтобы заставить его работать?

...