¿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:
Registrando el plugin sbt. Agregue lo siguiente a
~/.sbt/0.13/plugins/np.sbt
.addSbtPlugin("me.lessis" % "np" % "0.2.0")
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") }
Utilice el comando np plugin -
np
. Cree un directorio vacío para el proyecto sbt y ejecutesbt 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