sbt:选择要运行的主类

Rog*_*ach 16 scala sbt

我的应用程序中有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.")
Run Code Online (Sandbox Code Playgroud)

所以我定义了它们(示例项目,两个类 - 源目录根目录中的Main1和Main2):

mainClass := Some("Main1")

selectMainClass := Some("Main1") 
Run Code Online (Sandbox Code Playgroud)

sbt提示符中的`show main-class'似乎也有效:

[info] Some(Main1)
Run Code Online (Sandbox Code Playgroud)

但是,sbt的run任务仍然促使我进入主要班级.

此外,sbt-revolver无法处理具有异常的多个类java.util.NoSuchElementException: None.get

使用sbt 0.11.2.

我在这做错了什么?

Hei*_*ger 14

从使用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)
...
Run Code Online (Sandbox Code Playgroud)

因此,您必须使用适当的范围:

set mainClass in (Compile, run) := Some("Foo")
Run Code Online (Sandbox Code Playgroud)


rad*_*dke 13

为了防止这种情况

sbt> ~run

Multiple main classes detected, select one to run:

[1] com.yourapp.MainClass1
[2] com.yourapp.MainClass2
[3] com.yourapp.MainClass3    
Run Code Online (Sandbox Code Playgroud)

做这个:

sbt> ~runMain com.yourapp.MainClass1
Run Code Online (Sandbox Code Playgroud)

  • `run-main`现在是`runMain`. (11认同)

Mat*_*t G 5

如果要特别为左轮手枪指定主类:

set mainClass in Revolver.reStart := Some("some.package.mainClass")
Run Code Online (Sandbox Code Playgroud)