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?
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.
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é.