Wie setze ich die Hauptklasse in Build?

77

Nach habe sbt runich mehrere Möglichkeiten der Hauptklasse.

Ich möchte eine Hauptklasse einrichten, also habe ich geschrieben in build.sbt:

mainClass := Some("aMainClass")

Aber sbt scheitert mit:

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

Ich habe es auch mit project/Project.scalaDatei versucht :

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

Error :

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

Wie setze ich die Hauptklasse in einem Build?

user312728
quelle

Antworten:

104

Die Hauptklasse muss mit dem Paket voll qualifiziert sein:

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

Dies funktioniert für die Ausführung und legt die Hauptklasse im Manifest fest, wenn die Paketaufgabe verwendet wird. Die Hauptklasse für diese Aufgaben kann wie folgt separat festgelegt werden:

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

Hinweis:

mainClass := Some("myPackage.aMainClass")

tut nichts. Wenn Sie dies in Ihre Build-Datei einfügen, erhalten Sie keine Warnung, dass dies nichts bewirkt.

Rich Oliver
quelle
1
Beachten Sie auch, dass dies mainClass in run := Some("myPackage.aMainClass")auch nichts bewirkt.
Tksfz
Und was ist, wenn die mainMethode in einer Klasse lebt, die sich nicht in einem Paket befindet, z. B. in App.class [...] / src / main / scala / App.class?
Koikos
^^ mainClass in (Kompilieren, Ausführen): = Some ("App")
0script0
23

Soweit ich weiß, sbterwartet hier einen vollständig qualifizierten Klassen / Objektnamen innerhalb Ihres Projekts. Zum Beispiel, wenn Ihre Hauptklasse so ist:

package prog

object Main extends App {
    // Hic sunt dracones
}

dann müsstest du deine Hauptklasse so geben:

mainClass := Some("prog.Main")

Sie erhalten einen Typfehler, weil dieser Typ nicht einfach gefunden wird.

Lanbo
quelle
15
Mit SBT 0.11.2 musste ich die Hauptklasse in den Kompilierungs- und Laufzeitbereichen festlegen: mainClass in (Compile, run) := Some("prog.Main")
Richard Dallaway