sbt запускает только работу, если я выбираю класс, а не если я передаю его в качестве аргумента - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть проект, созданный из шаблона. Когда я делаю sbt run, я выбираю класс с main и он запускается. Но когда я прохожу класс с sbt "runMain com.mitzit.WordCount", это терпит неудачу. Как я могу передать класс с main, который я хочу запустить из командной строки? Я не хочу редактировать build.sbt

Шаги для воспроизведения

получить проект:

sbt new tillrohrmann/flink-project.g8 \
  --name=sbt-flink-template \
  --organization=com.mitzit \
  --version=0.1 \
  --flink_version=1.7.0 \
  --scala=2.12.11

Это работает

run sbt run

Multiple main classes detected, select one to run:

 [1] com.mitzit.Job
 [2] com.mitzit.SocketTextStreamWordCount
 [3] com.mitzit.WordCount

Enter number: 3

[success] Total time: 395 s, completed Apr 22, 2020 4:24:22 PM

Это терпит неудачу

sbt "runMain com.mitzit.WordCount"

[error] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/api/common/typeinfo/TypeInformation
[error]         at com.mitzit.WordCount.main(WordCount.scala)

Как можно запустить указанную c главную без необходимости выбирать ее каждый раз?

1 Ответ

1 голос
/ 23 апреля 2020

Проблема в том, что в проекте root часть библиотек Flink классифицируется как provided

. Для решения этой проблемы этот шаблонный проект tillrohrmann/flink-project.g8 предоставляет вспомогательный подпроект mainRunner которые просто редактируют конфигурацию зависимостей, удаляя классификатор provided, чтобы включить его запуск из IntelliJ (или sbt, как вы просите)

, вы можете просто запустить

sbt "mainRunner/runMain com.mitzit.WordCount"
...