www update org scala sbt

update - scala sbt ubuntu



cómo establecer la clase principal en el proyecto SBT 0.13 (6)

¿Podrían explicarme cómo establecer la clase principal en el proyecto SBT? Estoy tratando de usar la versión 0.13.

Mi estructura de directorios es muy simple (a diferencia de la documentación de SBT). En la carpeta raíz, tengo build.sbt con el siguiente contenido

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

Y tengo un project subcarpetas con un solo archivo Hi.scala que contiene el siguiente código

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

Puedo compilarlo llamando a sbt compile pero sbt run returns

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 compile:run for the full output. [error] (compile:run) No main class detected. [error] Total time: 0 s, completed Apr 8, 2013 6:14:41 PM

PD.

Estoy sorprendido de que después de leer la documentación de SBT y 15 preguntas similares sobre StackOverflow no haya podido ejecutar el proyecto SBT. Es una funcionalidad básica que debería ser totalmente simple y clara en los primeros 10 segundos de mirar el sitio web de SBT.

PS2.

Y me gustaría pedirles a los empleados de Typesafe que mejoren la documentación de sus productos en lugar de rechazar las preguntas de las personas que están invirtiendo mucho tiempo en cambiar a una nueva plataforma.


Aquí es cómo especificar la clase principal

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


Debe colocar el origen de la aplicación en src/main/scala/ , project/ para el código de definición de compilación.


Intenta usar un objeto y extenderlo desde la aplicación en lugar de usar la clase

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

porque necesita ejecutar el método principal ni la clase principal


Para módulos personalizados en SBT (0.13), solo ingrese en la consola SBT:

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

para cambiar el alcance al móduloX, como se define en Built.scala. Todas las clases principales dentro de ese alcance se detectarán automáticamente. De lo contrario, obtienes el mismo error de no detectar ninguna clase principal. Por el amor de Dios, SBT no te dice que el alcance predeterminado no está establecido. No tiene nada que ver con las carpetas de origen predeterminadas y no predeterminadas, pero solo con SBT no dice nada que no sabe qué módulo usar de forma predeterminada.

Big Hint to type safe : POR FAVOR agregue un resultado predeterminado como:

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

al final de SBT comienza a disminuir el nivel de frustración al usar SBT en proyectos de varios módulos .....


Si tiene varios métodos principales en su proyecto, puede agregar la siguiente línea a su archivo build.sbt:

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

Si desea especificar la clase que se agregará al manifiesto cuando su aplicación esté empaquetada como un archivo JAR, agregue esta línea a su archivo build.sbt:

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

También puede especificar la clase principal utilizando el comando run-main en sbt y el activador para ejecutar:

sbt "run-main com.saeed.ApplicationMain"

o

activator "run-main com.saeed.ApplicationMain"


Tuve el mismo problema: estaba el modo siguiendo el tutorial en http://www.scala-sbt.org/0.13/docs/Hello.html , y en mi opinión, como herramienta de sbt , la interacción y los mensajes de error de sbt pueden ser bastante engañoso para un recién llegado.

Resultó, horas después de rascarse la cabeza, que me perdí la línea de cd hello crítico en el ejemplo cada vez. :-(