78 votes

Comment définir la classe principale dans build?

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 le fichier project/Project.scala

 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 un build ?

104voto

Rich Oliver Points 1942

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")

Noter:

 mainClass := Some("myPackage.aMainClass")

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

23voto

Lambda Dusk Points 3855

Pour autant que je sache, sbt attend ici un nom de classe/objet pleinement qualifié dans votre projet. Par exemple, si votre classe principale ressemble à 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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X