你如何在sbt命令行查询`mainClass`的值?

Mik*_*rty 1 scala sbt

在sbt命令行中,build.sbt只需键入其名称即可查找大多数变量- 例如:

> libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.3, junit:junit:latest.revision)
Run Code Online (Sandbox Code Playgroud)

但这不适用于mainClass:

> mainClass
[success] Total time: 0 s, completed Jul 16, 2014 7:20:58 AM
Run Code Online (Sandbox Code Playgroud)

大概这是因为你设置价值的mainClass方式并不那么简单 - 你必须把这样的东西放在build.sbt:

mainClass in (Compile, run)        := Some("com.example.MyClass")
mainClass in (Compile, packageBin) := Some("com.example.MyClass")
mainClass in (Test,    run)        := Some("com.example.MyClass")
mainClass in (Test,    packageBin) := Some("com.example.MyClass")
Run Code Online (Sandbox Code Playgroud)

事实上,事实证明,它mainClass实际上根本不是一个普通的价值 - 它是一个TaskKey,而不是一个SettingKey.因此,当您在sbt命令行键入其名称时,我认为sbt实际上正在运行一些代码.

那么...我在sbt命令行输入什么来查询,例如,mainClass in (Compile, run)?的值?(或者,所有的值mainClass.)

sjr*_*jrd 5

如果在命令行中输入其名称,则默认情况下设置会显示其值,但任务不会.libraryDependencies是一个设置,这就是它默认显示其值的原因.

mainClass然而,这是一项任务.要显示任务的值,您必须明确使用show:

> show mainClass
Run Code Online (Sandbox Code Playgroud)

如果您想要查看给定范围,任务和/或项目中的值,则应填写必要的轴 - 请参阅http://www.scala-sbt.org/0.13.5/docs/Getting-Started/Scopes .html.

> show run::mainClass
[info] Some(com.example.Hello)

> show compile:mainClass
[info] Some(com.example.Hello)
Run Code Online (Sandbox Code Playgroud)