如何在构建中设置主类?


77

sbt run主班上我有多种选择。

我想设置一个主类,所以我写在build.sbt

mainClass := Some("aMainClass")

但是sbt失败了:

build.sbt:1: error: not found: value aMainClass

我也尝试过project/Project.scalafile:

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

错误:

 project/Project.scala:3: not found: type aMainClass

如何在构建中设置主类?

Answers:


104

主类必须完全符合以下条件:

Compile/mainClass := Some("myPackage.aMainClass")

这将可以运行,并且在使用包任务时将在清单中设置Main-Class。这些任务的主类可以单独设置,如下所示:

mainClass in (Compile, run) := Some("myPackage.aMainClass")
mainClass in (Compile, packageBin) := Some("myPackage.anotherMainClass")

注意:

mainClass := Some("myPackage.aMainClass")

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


1
请注意类似地mainClass in run := Some("myPackage.aMainClass")也无济于事。
tksfz 2015年

如果该main方法位于没有任何包的类中,例如位于App.class位置/src/main/scala/App.class中,该怎么办?
Koikos

(编译,运行):= Some(“ App”)
0script0

23

据我所知,sbt这里期望项目中具有完全限定的类/对象名称。例如,如果您的主类是这样的:

package prog

object Main extends App {
    // Hic sunt dracones
}

那么您将必须像这样给您的主班:

mainClass := Some("prog.Main")

您会收到一个类型错误,因为不能简单地找到该类型。


15
使用SBT 0.11.2,我发现我必须在编译和运行时范围中设置主类: mainClass in (Compile, run) := Some("prog.Main")
Richard Dallaway 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.