scala - org - Forma idiomática de escribir compilaciones multiproyecto con archivos.sbt en sbt 0.13
scala sbt install windows (1)
Ya debería ser el caso en 0.12 que puede poner archivos .sbt
en el directorio base de un subproyecto y las configuraciones allí se incluirán en el alcance de ese proyecto.
El código se reutiliza entre archivos .sbt
creando un archivo .scala
normal en project/
. El código en el project/
estará disponible para su uso en los archivos .sbt
. Las definiciones en un .sbt
no son visibles para otros archivos .sbt
, al menos en 0.13. Esto es principalmente una restricción de implementación y no está determinado si esto se eliminará en futuras versiones.
El proyecto raíz predeterminado agregará todos los subproyectos, incluidos los provenientes de proyectos definidos en subProject/build.sbt
.
La dificultad actual es hacerlo explícito. Por ejemplo, el siguiente build.sbt
en el directorio raíz definiría un subproyecto en sub/
. Esta es una definición completa, que define la ID, el directorio base, etc. para el proyecto.
<root>/build.sbt
lazy val sub = project
Sin embargo, no puede hacer referencia a nada definido en <sub>/build.sbt
. (La existencia de sub/build.sbt
no se conoce hasta después de compilar y evaluar <root>/build.sbt
). Por lo tanto, para definir explícitamente qué subagregados, necesitaría algo como:
sub/build.sbt
lazy val sub = project.in(file(".")).aggregates(subSub)
//or: lazy val sub = project in file(".") aggregate subSub
lazy val subSub = project
Sin embargo, esto duplica la definición de sub
.
Una posible solución en el futuro es hacer que la definición de raíz sea solo una referencia, como:
<root>/build.sbt
lazy val sub = LocalProject("sub")
He escuchado que los archivos .sbt se han mejorado de varias formas en 0.13, y que ahora puedo especificar compilaciones multiproyecto en ellos.
http://www.scala-sbt.org/0.13.0/docs/Community/ChangeSummary_0.13.0.html#sbt-format-enhancements menciona que ahora podemos definir subproyectos en un archivo .sbt. También sé que múltiples archivos .sbt en la raíz se agregarán en un solo archivo conceptual.
Lo que realmente me gustaría, sin embargo, es no contaminar mi raíz con una docena de archivos .sbt de subproyectos. ¿Hay alguna forma de que pueda lanzar los archivos subproject build.sbt en sus respectivos subdirectorios, mantener algún código común entre ellos en algún lugar compartido, y luego tener un build.sbt raíz para todo el proyecto que agrega los subproyectos? Tengo una configuración similar en los archivos .scala en este momento, pero preferiría usar archivos .sbt si es posible.
Si eso no es posible, ¿cuál es la forma "correcta" de construir grandes compilaciones multiproyecto con archivos .sbt?