web-dev-qa-db-fra.com

Comment définir la classe principale dans la construction?

Sur sbt run J'ai plusieurs choix de classe principale.

Je voudrais définir une classe principale donc j'ai écrit en build.sbt:

mainClass := Some("aMainClass")

Mais sbt échoue avec:

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

J'ai aussi essayé avec project/Project.scala fichier :

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

erreur :

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

Comment définir la classe principale dans une build?

74
user312728

La classe principale doit être pleinement qualifiée avec le package:

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

Cela fonctionnera pour l'exécution et définira la classe principale dans le manifeste lors de l'utilisation de la tâche de package. La classe principale pour ces tâches peut être définie séparément comme dans:

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

Remarque:

mainClass := Some("myPackage.aMainClass")

ne fait rien. Si vous mettez cela dans votre fichier de build, vous ne recevrez aucun avertissement indiquant qu'il ne fait rien.

98
Rich Oliver

Pour autant que je sache, sbt attend ici un nom de classe/objet complet dans votre projet. Par exemple, si votre classe principale est comme ceci:

package prog

object Main extends App {
    // Hic sunt dracones
}

alors vous devrez donner à votre classe principale comme ceci:

mainClass := Some("prog.Main")

Vous obtenez une erreur de type car ce type n'est pas simplement trouvé.

23
Lanbo