sbt

¿Por qué sbt no crea archivos de proyecto?



(5)

Como se describe en el np léame del np , los pasos necesarios serían:

mkdir -p src/{main,test}/scala touch build.sbt && vi build.sbt # fill in the basics (name, organization, version) touch README.md && vi README.md sbt

... empezar a programar

He intentado instalar SBT en mi macbook. Cuando lo ejecuto, no me pide ninguna definición de proyecto (por ejemplo, el título) y simplemente dice

[info] Set current project to default (in build file:/Users/qui/Documents/Programming/test2/)

Luego va a lo que parece ser el intérprete sbt.

Cuando miro dentro de "test2", hay un directorio de proyecto y destino, pero no veo un directorio src con el que trabajar

Claramente me he equivocado en alguna parte de mi instalación, pero no estoy seguro de dónde. ¿Algunas ideas?

Actualizar

Así que acabo de instalar 0.10 en una instalación nueva de fedora. Y estoy recibiendo exactamente el mismo problema, el mismo mensaje de "información" y solo ha creado un proyecto y un directorio de destino

Debo estar haciendo algo idiota ¿no? ¿Qué estoy haciendo mal? :pag


Encontré y actualicé un script de Alvin Alexander (autor del increíble libro Scala Cookbook) que hace exactamente lo que quieres.

Una vez más, proporciono un script bash porque la tarea de crear los directorios y los archivos es pedante, pero simple. Hacer un complemento completo para SBT para esto es una exageración.

This script creates an SBT project directory beneath the current directory. Directory/Project Name (MyFirstProject): ProjectX Create .gitignore File? (Y/n): Create README.md File? (Y/n): ----------------------------------------------- Directory/Project Name: ProjectX Create .gitignore File?: y Create README.md File?: y ----------------------------------------------- Create Project? (Y/n): Project created. See the following URL for build.sbt examples: http://alvinalexander.com/scala/sbt-syntax-examples $ cat build.sbt name := "ProjectX" version := "1.0" scalaVersion := "2.11.7" $

Y, finalmente, creo que el lanzamiento de SBT sin ningún argumento debería comportarse exactamente como este script.


No, no estás haciendo algo mal, las versiones anteriores de sbt (0.7.x) te preguntaron si querías crear tu proyecto.

La versión sbt 0.10.x es una reescritura completa y no actúa de la misma manera (es decir, le pedimos que cree un proyecto en el inicio).

El antiguo proyecto estaba en googlecode pero desde entonces se ha movido a github, puede encontrar la documentación para 0.10.x en https://github.com/harrah/xsbt/wiki , en particular https://github.com/harrah/xsbt/wiki/Settings si vienes de un fondo de 0.7.x.

Es un poco difícil envolver tu cabeza en torno al nuevo sistema de configuración al principio, pero confía en mí cuando digo que te encantará :)


Trabajo con SBT 0.13, así que ... su kilometraje puede variar.

comportamiento por defecto de sbt

Lo que experimentas es el comportamiento predeterminado de sbt. La herramienta espera que los archivos del proyecto ya estén en su lugar o cuando no haya archivos del proyecto que no se moleste en crearlos, los valores predeterminados solo se aplican al directorio actual que efectivamente se convierte en el directorio del proyecto para un proyecto llamado por su nombre del directorio en el que se encuentra. SBT luego abre sbt shell.

jacek:~/sandbox//testaaa $ tree . 0 directories, 0 files jacek:~/sandbox//testaaa $ sbt [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Updating {file:/Users/jacek/.sbt/0.13/plugins/}global-plugins... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Set current project to testaaa (in build file:/Users/jacek/sandbox//testaaa/) [testaaa]>

Cotización Running desde la documentación oficial de SBT.

La ejecución de sbt sin argumentos de línea de comando lo inicia en modo interactivo. El modo interactivo tiene un indicador de comando (con el tabulador y el historial).

Ejemplo

En su caso, cuando inició sbt en /Users/qui/Documents/Programming/test2/ asumió silenciosamente que era el directorio del proyecto y aplicó la configuración predeterminada.

La siguiente sesión de sbt también está en el directorio test2 . Utilizo la help para mostrar la ayuda de una tecla de configuración y luego la tecla para mostrar su valor.

jacek:~/sandbox//test2 $ tree . 0 directories, 0 files jacek:~/sandbox//test2 $ sbt [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to test2 (in build file:/Users/jacek/sandbox//test2/) [test2]> help name Project name. [test2]> name [info] test2 [test2]> help organization Organization/group ID. [test2]> organization [info] default [test2]> help version The version/revision of the current module. [test2]> version [info] 0.1-SNAPSHOT [test2]> help scalaVersion The version of Scala used for building. [test2]> scalaVersion [info] 2.10.2

(He cambiado la solicitud para que el nombre del proyecto, es decir, el nombre del directorio sbt se haya iniciado, se muestre antes de > ).

Puede cambiar el valor de una clave con el comando set que evalúa una configuración y la aplica al proyecto actual.

[test2]> help set set [every] <setting-expression> Applies the given setting to the current project: 1) Constructs the expression provided as an argument by compiling and loading it. 2) Appends the new setting to the current project''s settings. 3) Re-evaluates the build''s settings. This command does not rebuild the build definitions, plugins, or configurations. It does not automatically persist the setting(s) either. To persist the setting(s), run ''session save'' or ''session save-all''. If ''every'' is specified, the setting is evaluated in the current context and the resulting value is used in every scope. This overrides the value bound to the key everywhere. [test2]> set scalaVersion := "2.10.3" [info] Defining *:scalaVersion [info] The new value will be used by *:allDependencies, *:dependencyUpdatesData and 11 others. [info] Run `last` for details. [info] Reapplying settings... [info] Set current project to test2 (in build file:/Users/jacek/sandbox//test2/) [test2]> scalaVersion [info] 2.10.3

En la otra pregunta sobre @regis-jean-gilles se muestra cómo establecer las otras configuraciones usando el comando set .

[test2]> set name := "My test2 sbt project" [info] Defining *:name [info] The new value will be used by *:description, *:normalizedName and 8 others. [info] Run `last` for details. [info] Reapplying settings... [info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox//test2/) [test2]> set version := "1.0" [info] Defining *:version [info] The new value will be used by *:isSnapshot, *:projectId and 5 others. [info] Run `last` for details. [info] Reapplying settings... [info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox//test2/) [test2]> set scalaVersion := "2.10.3" [info] Defining *:scalaVersion [info] The new value will be used by *:allDependencies, *:dependencyUpdatesData and 11 others. [info] Run `last` for details. [info] Reapplying settings... [info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox//test2/) [test2]> session save [info] Reapplying settings... [info] Set current project to My test2 sbt project (in build file:/Users/jacek/sandbox//test2/) [test2]> exit

El archivo build.sbt contendrá todas las configuraciones como si se hubieran establecido allí en primer lugar.

$ cat build.sbt name := "My test2 sbt project" version := "1.0" scalaVersion := "2.10.3"

De forma predeterminada, sbt crea varios archivos en target directorio de target . Cuando mira dentro del directorio de target , no hay archivos, solo un directorio vacío. Lo mismo se aplica al project que también puede o no contener target directorio de target . Se supone que están disponibles y, si no lo están, se crean de forma predeterminada.

Cuando cambia una configuración en el shell interactivo de sbt (con el set ), puede guardar la sesión con la session save .

[test2]> help session session <command> Manipulates session settings, which are temporary settings that do not persist past the current sbt execution (that is, the current session). Valid commands are: clear, clear-all Removes temporary settings added using ''set'' and re-evaluates all settings. For ''clear'', only the settings defined for the current project are cleared. For ''clear-all'', all settings in all projects are cleared. list, list-all Prints a numbered list of session settings defined. The numbers may be used to remove individual settings or ranges of settings using ''remove''. For ''list'', only the settings for the current project are printed. For ''list-all'', all settings in all projets are printed. remove <range-spec> <range-spec> is a comma-separated list of individual numbers or ranges of numbers. For example, ''remove 1,3,5-7''. The temporary settings at the given indices for the current project are removed and all settings are re-evaluated. Use the ''list'' command to see a numbered list of settings for the current project. save, save-all Makes the session settings permanent by writing them to a ''.sbt'' configuration file. For ''save'', only the current project''s settings are saved (the settings for other projects are left alone). For ''save-all'', the session settings are saved for all projects. The session settings defined for a project are appended to the first ''.sbt'' configuration file in that project. If no ''.sbt'' configuration file exists, the settings are written to ''build.sbt'' in the project''s base directory. [test2]> session save [info] Reapplying settings... [info] Set current project to test2 (in build file:/Users/jacek/sandbox//test2/)

Una vez que lo haga, se build.sbt un build.sbt con sus propios ajustes. Ese podría ser un buen punto de partida para una mayor configuración de un proyecto.

jacek:~/sandbox//test2 $ cat build.sbt scalaVersion := "2.10.3"

Activador seguro de tipos

Según la página de inicio de Typesafe Activator :

Typesafe Activator es una herramienta de línea de comando o basada en navegador que ayuda a los desarrolladores a comenzar con la plataforma reactiva Typesafe.

Debajo de las portadas, Activator es una interfaz de usuario construida sobre sbt, como lo demostró Josh Suereth en el screencast Introducing sbt 0.13.2 .

Parece que esa es la única solución bendecida para configurar proyectos sbt de las muchas plantillas disponibles en Activator.

giter8 - plantillas de proyecto sbt (diseño)

Sin embargo, si necesita ayuda para diseñar la estructura del directorio y tiene una configuración de proyecto lista para usar, puede usar giter8 que es una herramienta de línea de comandos para aplicar plantillas definidas en github

Digamos que quieres crear un proyecto con dependencia de scalaz . Es posible que desee utilizar adinapoli/scalaz-revolver (consulte la lista de plantillas disponibles ).

jacek:~/sandbox/ $ g8 adinapoli/scalaz-revolver Simple scala project with sbt-revolver organization [org.example]: pl.japila name [Scala sbt-revolver project]: scala_version [2.9.2]: 2.10.3 version [0.1-SNAPSHOT]: Template applied in ./scala-sbt-revolver-project jacek:~/sandbox/ $ cd scala-sbt-revolver-project/ jacek:~/sandbox//scala-sbt-revolver-project $ tree . ├── README ├── build.sbt ├── project │   ├── Build.scala │   ├── build.properties │   └── plugins.sbt └── src └── main └── scala └── pl └── japila └── ScalaSbtrevolverProject.scala 6 directories, 6 files

Consulte Crear un directorio de proyecto con código fuente para obtener más información.

np - la nueva generación de proyectos sbt simplificada (r)

Como se señala en los comentarios de @ 0__ a continuación, hay otro proyecto que apunta a simplificar cómo se crean los nuevos proyectos en sbt - np . Eso parece exactamente lo que necesitabas.

En https://github.com/softprops/np#for-sbt-013 hay una descripción completa de lo que se necesita para configurarlo y crear nuevos proyectos sbt usando la utilidad que se resume en:

  1. Registrando el plugin sbt. Agregue lo siguiente a ~/.sbt/0.13/plugins/np.sbt .

    addSbtPlugin("me.lessis" % "np" % "0.2.0")

  2. Defina una anulación global personalizada en ~/.sbt/0.13/np.sbt . Agregue lo siguiente al archivo.

    seq(npSettings:_*) (NpKeys.defaults in (Compile, NpKeys.np)) ~= { _.copy(org="me.lessis", version="0.1.0-SNAPSHOT") }

  3. Utilice el comando np plugin - np . Cree un directorio vacío para el proyecto sbt y ejecute sbt np .

    jacek:~/sandbox/ $ mkdir np-sandbox/ jacek:~/sandbox/ $ cd np-sandbox/ jacek:~/sandbox//np-sandbox $ sbt np [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to np-sandbox (in build file:/Users/jacek/sandbox//np-sandbox/) [info] Generated build file [info] Generated source directories [success] Total time: 0 s, completed Dec 7, 2013 12:51:42 PM jacek:~/sandbox//np-sandbox $ tree . ├── build.sbt ├── src │   ├── main │   │   ├── resources │   │   └── scala │   └── test │   ├── resources │   └── scala └── target └── streams └── compile └── np └── $global └── out 12 directories, 2 files jacek:~/sandbox//np-sandbox $ cat build.sbt organization := "me.lessis" name := "default" version := "0.1.0-SNAPSHOT"


Una sola línea para crear la estructura de directorios y los archivos (todos vacíos):

mkdir -p ./src/{main,test}/{scala,java,resources}; mkdir project; touch build.sbt; touch project/build.properties