我的应用程序中有6个主要类,我通常只使用其中一个,所以我想通过sbt自动运行它。 sbt可以在build.sbt中定义两个键:
// Run Key
val selectMainClass = TaskKey[Option[String]]("select-main-class", "Selects the main class to run.")
val mainClass = TaskKey[Option[String]]("main-class", "Defines the main class for packaging or running.")
所以我定义了它们(示例项目,两个类 - 源目录的根目录中的Main1和Main2):
mainClass := Some("Main1")
selectMainClass := Some("Main1")
来自sbt提示符的`show main-class'似乎也有效:
[info] Some(Main1)
但是sbt的run
任务仍然提示我上大班。
此外,sbt-revolver无法使用异常java.util.NoSuchElementException: None.get
使用sbt 0.11.2。
我在这里做错了什么?
答案 0 :(得分:13)
从使用 inspect 可以看出, mainClass 的作用域是各种配置和任务:
> inspect compile:main-class(for run)
[info] Task: scala.Option[java.lang.String]
[info] Description:
[info] Defines the main class for packaging or running.
[info] Provided by:
[info] {file:/Users/heiko/tmp/}default-d7f1bf/compile:main-class(for run)
...
因此,您必须使用适当的范围:
set mainClass in (Compile, run) := Some("Foo")
答案 1 :(得分:13)
为了防止这种情况:
sbt> ~run
Multiple main classes detected, select one to run:
[1] com.yourapp.MainClass1
[2] com.yourapp.MainClass2
[3] com.yourapp.MainClass3
这样做:
sbt> ~runMain com.yourapp.MainClass1
答案 2 :(得分:5)
如果您想特别为左轮手枪指定一个主类:
set mainClass in Revolver.reStart := Some("some.package.mainClass")
答案 3 :(得分:2)
oneline console:
sbt "run-main com.path.to.MainClass"