Supongamos que un chico de mi empresa tiene un proyecto de sbt llamado commons
que es bastante general. Este proyecto se define de la manera tradicional sbt: en la carpeta principal con la definición de compilación en el archivo project/Build.scala
.Cómo especificar eso para construir el proyecto A ¿otro proyecto B tiene que ser construido primero?
Ahora otro tipo está desarrollando un proyecto llamado databinding
que depende de commons
. Queremos definir este proyecto de la misma manera, con project/Build.scala
.
tenemos la siguiente estructura de directorios:
dev/
commons/
src/
*.scala files here...
project/
Build.scala
databinding/
src/
*.scala files here...
project/
Build.scala
¿Cómo puedo especificar que requiere databinding
commons
que se construirá primero y utilizar los archivos de clase de salida?
leí Multi-project builds, y se le ocurrió la siguiente definición para la construcción de databinding
:
object MyBuild extends Build {
lazy val root = Project(id = "databinding", base = file(".")) settings (
// ... omitted
) dependsOn (commons)
lazy val common = Project(id = "commons",
base = file("../commons")
)
}
Excepto que no funciona: SBT no le gusta la ..
y lanza una AssertionError. Aparentemente, commons
debe ser una carpeta dentro de databinding
. Pero estos dos proyectos se guardan en repositorios git separados, que no podemos anidar.
¿Cómo se puede especificar esta dependencia correctamente?
Muchas gracias por la explicación, David. Esto parece extraño, ¿solo porque otros proyectos usan mi proyecto 'commons', no puede tener una definición completa en un archivo' .scala'? –
Y, ¿hay alguna alternativa, por ejemplo, agregar un resolver que busque los contenedores generados por los proyectos de los que depende? –
En cuanto a su primera pregunta, es una restricción SBT que le impide usar un '*.archivo scala' para definir subproyectos. Creo que es una limitación debido a la forma en que SBT fusiona los archivos de definición de proyectos. Afortunadamente, los archivos '* .sbt' podrán acceder a valores, configuraciones ... desde su proyecto raíz' Build.scala'. También puede considerar, como lo menciona en el segundo comentario, publicar su 'common' en local (publish-local) por ejemplo, y el resolvedor debería recuperarlo. Tenga cuidado de agregar 'isChanging()' a la definición de dependencia si desea usar un sistema SNAPSHOT. Espero que esto ayude – David