sbt运行只有在我选择类的情况下才有效,而不是在我把它作为参数时才有效。

问题描述 投票:0回答:1

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

我如何才能运行一个特定的主,而不必每次都选择它?

scala sbt apache-flink
1个回答
1
投票

问题是,在根项目中,部分Flink库被分类为 provided

为了克服这个问题,本模板项目 tillrohrmann/flink-project.g8 正在提供一个公用事业子项目 mainRunner 简单地编辑了依赖配置,删除了 provided 个,使其能够在IntelliJ(或你问的sbt)上运行

你可以简单地运行

sbt "mainRunner/runMain com.mitzit.WordCount"
© www.soinside.com 2019 - 2024. All rights reserved.