2012-07-10 11 views
97

¡Me estoy saliendo del armario en esto! No entiendo SBT. Allí, lo dije, ahora ayúdame por favor.¿Puede alguien explicar la forma correcta de usar SBT?

Todos los caminos conducen a Roma, y ​​que es el mismo para SBT: Para comenzar con SBT hay SBT, SBT Launcher, SBT-extras, etc, y luego hay diferentes maneras de incluir y decidir sobre los repositorios. ¿Hay una 'mejor' manera?

Pregunto porque a veces me pierdo un poco. La documentación de SBT es muy minuciosa y completa, pero no sé cuándo usar build.sbt o project/build.properties o project/Build.scala o project/plugins.sbt.

Entonces se vuelve divertido, existe el Scala-IDE y SBT - ¿Cuál es la forma correcta de usarlos juntos? ¿Qué viene primero, el pollo o el huevo?

Lo más importante es probablemente, ¿cómo se encuentran los repositorios y las versiones correctas para incluir en su proyecto? ¿Acabo de sacar una machette y comenzar a abrir paso hacia adelante? A menudo encuentro proyectos que incluyen todo y el fregadero de la cocina, y luego me doy cuenta, no soy el único que se pierde un poco.

Como un simple ejemplo, en este momento, estoy comenzando un nuevo proyecto. Quiero utilizar las últimas características de SLICK y Scala y esto probablemente requerirá la última versión de SBT. ¿Cuál es el mejor punto para comenzar y por qué? ¿En qué archivo debería definirlo y cómo debería verse? Sé que puedo hacer que esto funcione, pero realmente me gustaría una opinión experta sobre dónde debería ir todo (por qué debería ir allí habrá una bonificación).

He estado usando SBT para proyectos pequeños desde hace más de un año. Usé SBT y luego SBT Extras (ya que desaparecieron algunos dolores de cabeza mágicamente), pero no estoy seguro de por qué debería estar usando uno u otro. Me estoy frustrando un poco por no entender cómo encajan las cosas juntas (SBT y repositorios), y creo que salvará al siguiente tipo que viene de esta manera a muchas dificultades si esto pudiera explicarse en términos humanos.

+2

¿Qué es exactamente lo que quiere decir con "no es la Scala-IDE y SBT"? Usted define su proyecto con sbt y sbt puede generar un proyecto ide (eclipse o intellij). Entonces SBT es lo primero ... – Jan

+2

@Jan lo mencioné porque Scala-IDE usa SBT como administrador de compilación. Consulte http://www.assembla.com/spaces/scala-ide/wiki/SBT-based_build_manager y baje en la publicación que mencionan "No es necesario definir el archivo de proyecto SBT". que encontré confuso – Jack

+0

bien. Como usualmente uso intellij (o sublime) para editar scala, no lo sabía. Supongo que el constructor genera sus propias configuraciones sbt? – Jan

Respuesta

28

Lo más importante es probablemente, ¿cómo se encuentran los repositorios y las versiones correctas para incluir en su proyecto? ¿Saco un machette y empiezo a abrir el camino hacia adelante? Me encuentro muy a menudo proyectos que incluyen todo y el fregadero de la cocina

Para dependencias basadas en Scala, me gustaría ir con lo que los autores recomiendan. Por ejemplo: http://code.google.com/p/scalaz/#SBT indica a utilizar:

libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4" 

O https://github.com/typesafehub/sbteclipse/ tiene instrucciones sobre dónde agregar:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0-RC1") 

para dependencias basadas en Java, utilizo http://mvnrepository.com/ para ver lo que hay ahí fuera, a continuación, haga clic en el Pestaña SBT. Por ejemplo http://mvnrepository.com/artifact/net.sf.opencsv/opencsv/2.3 indica a utilizar:

libraryDependencies += "net.sf.opencsv" % "opencsv" % "2.3" 

saque el machete y empezar a cortar el camino a seguir. Si tiene suerte, no terminará usando frascos que dependen de algunos de los mismos frascos pero con versiones incompatibles. Dado el ecosistema de Java, a menudo se termina incluyendo todo y el fregadero de la cocina y se necesita un cierto esfuerzo para eliminar las dependencias o garantizar que no faltan las dependencias requeridas.

Como un simple ejemplo, en este momento, estoy comenzando un nuevo proyecto. Quiero utilizar las últimas características de SLICK y Scala, y esto probablemente requiera la última versión de SBT. ¿Cuál es el punto más sensato para comenzar, y por qué?

Creo que el punto es build immunity to sbt gradually.

Asegúrese de que entiende:

  1. Scopes formato {<build-uri>}<project-id>/config:key(for task-key)
  2. los 3 sabores de configuración (SettingKey, TaskKey, InputKey) - lea la sección denominada "llaves de la tarea" en http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def

Mantenga esas 4 páginas abiertas en todo momento para que pueda saltar y buscar varias definiciones y ejemplos:

  1. http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def
  2. http://www.scala-sbt.org/release/docs/Detailed-Topics/index
  3. http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html
  4. http://harrah.github.com/xsbt/latest/sxr/Defaults.scala.html

aprovechar al máximo los show y inspecty la finalización pestaña para familiarizarse con los valores reales de los ajustes, sus dependencias, definiciones y ajustes relacionados.No creo que las relaciones que descubras usando inspect estén documentadas en ningún lado. Si hay una mejor manera en que quiero saber al respecto.

24

La forma en que uso SBT es:

  1. uso sbt-extras - acaba de obtener el script de shell y añadirlo a la raíz de proyectar
  2. Crear una carpeta de proyecto con un archivo MyProject.scala para la creación de sbt. Prefiero esto mucho más que el planteamiento build.sbt - es scala y es más flexible
  3. Crea un proyecto/plugins.sbt y agrega el complemento adecuado para tu IDE. O bien sbt-eclipse, sbt-idea o ensime-sbt-cmd para que pueda generar archivos de proyecto para eclipse, intellij o ensime.
  4. lanzamiento SBT en la raíz de su proyecto y generar los archivos de proyecto para su IDE
  5. beneficio

No me molesto en comprobar los archivos de proyecto IDE, ya que se generan por SBT, pero no puede se las razones por las que quieres hacer eso.

Puede ver un ejemplo de configuración como este here.

+0

Gracias por la buena respuesta. Acepté la otra respuesta, porque abarca más terreno, y elevé tu causa porque también es muy buena. Hubiera aceptado ambos si pudiera. – Jack

1

Uso Typesafe activador, una forma elegante de llamar a SBT, que viene con plantillas de proyecto y semillas: https://typesafe.com/activator

Activator new 

Fetching the latest list of templates... 

Browse the list of templates: http://typesafe.com/activator/templates 
Choose from these featured templates or enter a template name: 
1) minimal-java 
2) minimal-scala 
3) play-java 
4) play-scala 
(hit tab to see a list of all templates) 
+4

Soy parcial a la idea de que, en caso de duda, agregar _más_ magia a la mezcla no resolverá tus problemas. – Cubic

Cuestiones relacionadas