www org scala sbt

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?