如何在构建中设置主类?

use*_*728 75 sbt

sbt run我主类的多种选择.

我想设置一个主要课程,所以我写了build.sbt:

mainClass := Some("aMainClass")
Run Code Online (Sandbox Code Playgroud)

但是sbt失败了:

build.sbt:1: error: not found: value aMainClass
Run Code Online (Sandbox Code Playgroud)

我也试过project/Project.scala文件:

import sbt._
  class ExecutableProject(info: ProjectInfo) extends DefaultProject(info)  {
  override def mainClass = Some("aMainClass")
}
Run Code Online (Sandbox Code Playgroud)

错误:

 project/Project.scala:3: not found: type aMainClass
Run Code Online (Sandbox Code Playgroud)

如何在构建中设置主类?

Ric*_*ver 100

主类必须完全符合包:

Compile/mainClass := Some("myPackage.aMainClass")
Run Code Online (Sandbox Code Playgroud)

这将适用于运行,它将在使用包任务时在Manifest中设置Main-Class.这些任务的主要类可以单独设置,如下所示:

mainClass in (Compile, run) := Some("myPackage.aMainClass")
mainClass in (Compile, packageBin) := Some("myPackage.anotherMainClass")
Run Code Online (Sandbox Code Playgroud)

注意:

mainClass := Some("myPackage.aMainClass")
Run Code Online (Sandbox Code Playgroud)

什么也没做.如果将它放在构建文件中,则不会收到任何警告.


Lan*_*nbo 23

据我所知,sbt这里需要一个完全限定的类/对象名称.例如,如果您的主类是这样的:

package prog

object Main extends App {
    // Hic sunt dracones
}
Run Code Online (Sandbox Code Playgroud)

那么你必须给你的主类这样:

mainClass := Some("prog.Main")
Run Code Online (Sandbox Code Playgroud)

您会收到类型错误,因为找不到该类型.

  • 使用SBT 0.11.2我发现我必须在编译和运行时范围中设置主类:`mainClass in(编译,运行):= Some("prog.Main")` (15认同)