comment définir la classe principale dans le projet SBT 0.13

Pourriez-vous, s’il vous plaît, m’expliquer comment définir la classe principale du projet SBT? J’essaie d’utiliser la version 0.13.

Ma structure de répertoire est très simple (contrairement à la documentation de SBT). Dans le dossier racine, j’ai build.sbt avec le contenu suivant

 name := "sbt_test" version := "1.0" scalaVersion := "2.10.1-local" autoScalaLibrary := false scalaHome := Some(file("/Program Files (x86)/scala/")) mainClass := Some("Hi") libraryDependencies ++= Seq( "org.scalatest" % "scalatest_2.10" % "2.0.M5b" % "test" ) EclipseKeys.withSource := true 

Et j’ai un project sous-dossier avec un seul fichier Hi.scala qui contient le code suivant

 object Hi { def main(args: Array[Ssortingng]) = println("Hi!") } 

Je suis capable de le comstackr en appelant sbt comstack mais sbt run retourne

 The system cannot find the file C:\work\externals\sbt\bin\sbtconfig.txt. [info] Loading project definition from C:\work\test_projects\sbt_test\project [info] Set current project to sbt_test (in build file:/C:/work/test_projects/sbt_test/) java.lang.RuntimeException: No main class detected. at scala.sys.package$.error(package.scala:27) [trace] Stack trace suppressed: run last comstack:run for the full output. [error] (comstack:run) No main class detected. [error] Total time: 0 s, completed Apr 8, 2013 6:14:41 PM 

PS

Je suis choqué qu’après avoir lu la documentation de SBT et 15 questions similaires sur StackOverflow, je ne pouvais pas faire fonctionner le projet SBT. C’est une fonctionnalité de base qui devrait être simple et claire dans les 10 premières secondes de regarder le site Web de SBT.

PS2.

Et je voudrais demander aux employés de Typesafe d’améliorer la documentation de leur produit au lieu de réduire les questions aux personnes qui consacrent beaucoup de temps au passage à une nouvelle plate-forme.

Vous devez mettre la source de votre application dans src/main/scala/ , project/ est pour le code de définition de construction.

Essayez d’utiliser un object et étendez-le depuis App au lieu d’utiliser class

 object Main extends App { println("Hello from main scala object") } 

parce que vous devez exécuter la méthode principale ni la classe principale

Voici comment spécifier la classe principale

mainClass in (Comstack,run) := Some("my.fully.qualified.MainClassName")

Pour les modules personnalisés dans SBT (0.13), entrez simplement sur la console SBT:

  project moduleX [info] Set current project to moduleX (in build file:/path/to/Projects/) > run [info] Running main 

passer de la scope à moduleX, comme défini dans Built.scala. Toutes les classes principales de cette scope seront détectées automatiquement. Sinon, vous obtenez la même erreur d’aucune classe principale détectée. Pour l’amour de Dieu, SBT ne vous dit pas que la scope par défaut n’est pas définie. Cela n’a rien à voir avec les dossiers sources par défaut et non par défaut, mais seulement avec SBT ne dit rien qu’il ne sait pas quel module utiliser par défaut.

Big Hint to typesafe : VEUILLEZ append une sortie par défaut comme:

 [info] Project module is not set. Please use ''project moduleX'' set scope or set in Built file (LinkToDocu) 

à la fin de SBT commencer à réduire le niveau de frustration lors de l’utilisation de SBT sur des projets multi-modules …..

Si vous avez plusieurs méthodes principales dans votre projet, vous pouvez append la ligne suivante à votre fichier build.sbt:

 val projectMainClass = "com.saeed.ApplicationMain" mainClass in (Comstack, run) := Some(projectMainClass) 

Si vous souhaitez spécifier la classe qui sera ajoutée au manifeste lorsque votre application est empaquetée en tant que fichier JAR, ajoutez cette ligne à votre fichier build.sbt:

 mainClass in (Comstack, packageBin) := Some(projectMainClass) 

Vous pouvez également spécifier la classe principale à l’aide de la commande run-main dans sbt et activator à exécuter:

 sbt "run-main com.saeed.ApplicationMain" 

ou

 activator "run-main com.saeed.ApplicationMain" 

J’ai eu le même problème: était le mode suivant le tutoriel à http://www.scala-sbt.org/0.13/docs/Hello.html , et à mon avis, en tant qu’outil de construction, l’interaction de sbt et les messages d’erreur peuvent être très trompeur pour un nouveau venu.

Il s’est avéré, des heures de tête plus tard, que je cd hello à chaque fois la ligne critique cd hello . 🙁