我有一个从模板创建的项目。 当我做 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
这个工程
运行 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)
我如何才能运行一个特定的主,而不必每次都选择它?
问题是,在根项目中,部分Flink库被分类为 provided
为了克服这个问题,本模板项目 tillrohrmann/flink-project.g8
正在提供一个公用事业子项目 mainRunner
简单地编辑了依赖配置,删除了 provided
个,使其能够在IntelliJ(或你问的sbt)上运行
你可以简单地运行
sbt "mainRunner/runMain com.mitzit.WordCount"