Я разрабатываю приложение, используя 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проект, так что я не знаю, как это адаптировать.
Что мне нужно сделать, чтобы заставить его работать?