2012-10-06 33 views
13

Tengo un conjunto de componentes poco relacionados, donde algunos de estos dependen de otros. Para ser concretos, supongamos que tenemos componentes "comunes", "a" y "b". "común" no tiene ninguna dependencia, pero todos los demás proyectos usan "común". Además, "a" depende de "b". Todos los componentes están escritos en Scala, y me gustaría usar sbt para compilarlos.SBT: Dependencia en otro proyecto SBT sin publicación

Las siguientes propiedades sería bueno tener:

  1. Varias personas trabajan en los diferentes proyectos, que es por eso que no quiere tener un repositorio único, sino más bien un repositorio por proyecto.
  2. Crear un proyecto debe ser fácil, y todas las dependencias deben construirse automáticamente (si es necesario). Es decir, si modifico "common" y luego construyo "b", primero debería construir "common" y luego continuar con build "b".
  3. Poder tener todos los proyectos en un IDE, de modo que la refactorización y las tareas IDE similares funcionen correctamente y todos los proyectos afectados se modifiquen correctamente.

Por lo que puedo ver, hay dos posibilidades de tener dependencias de este tipo en sbt; o utilizamos subproyectos o utilizamos una dependencia administrada (que se envía a alguna parte, por ejemplo, localmente). Sin embargo, parece que estas dos opciones no proporcionan (1) o (2) arriba. En particular

  • El uso de subproyectos nos obliga a utilizar un único repositorio, ya que todos los subproyectos deben estar en los subdirectorios del proyecto principal.
  • Publicar los proyectos localmente y usar dependencias administradas es engorroso, ya que al cambiar "common" y luego a "b" solo se recogen los cambios en "common" si ese proyecto se compiló y publicó primero. Puedo ver que las dependencias administradas son útiles para muchos casos, pero para nuestro caso de uso particular no parecen funcionar bien. Con frecuencia trabajamos en varios proyectos y los cambiamos al mismo tiempo. Por esta razón, tener que publicar a menudo parece demasiado complicado.

¿Realmente no hay manera de decir que un proyecto sbt depende de otro proyecto sbt en una determinada ubicación (relativa) y de que sbt sepa cuándo crear la dependencia?

Respuesta

6

Con SBT puede usar dependencias de origen.

lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson) 

lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0") 

Se obtendrá de git en este ejemplo. Es posible que pueda especificar una ubicación de archivo en el disco, aunque no puedo encontrar ejemplos. Posiblemente

lazy val dep = file("/path/to") 

o

lazy val dep = uri("file:///path/to") 

Estoy luchando con esto por mí mismo - en el momento im utilizando el método de publicación-local que está trabajando bien.

+1

'lazy val dep = uri (" file: /// path/to ")' funciona para mí. La ruta relativa también funciona. Ejemplos: 'lazy val helloWorldProj = uri (" file: /// D:/EclipseProjects/helloworld ")' O 'lazy val helloWorldProj = uri (" ../ helloworld ")' – dips

+0

Y estos deben agregarse al archivo build.sbt si no estoy equivocado –