sbt仅在我选择class时运行,而不是在我将其作为参数传递时运行

p5fdfcr1  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(303)

我有一个从模板创建的项目。当我这么做的时候 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)

如何运行特定的main而不必每次都选择它?
pgky5nke

pgky5nke1#

问题是在根项目中,flink库的一部分被分类为 provided 为了解决这个问题,这个模板项目 tillrohrmann/flink-project.g8 正在提供公用事业子项目 mainRunner 只需编辑依赖项配置,删除 provided 分类器,允许从intellij(或您要求的sbt)运行它
你可以直接跑

sbt "mainRunner/runMain com.mitzit.WordCount"

相关问题