2012-10-06 4 views
13

Ho una serie di componenti vagamente correlate in cui alcuni di questi dipendere dagli altri. Per concretezza, supponiamo di avere componenti "comuni", "a" e "b". "comune" non ha alcuna dipendenza, ma tutti gli altri progetti usano "comune". Inoltre, "a" dipende da "b". Tutti i componenti sono scritti in Scala e mi piacerebbe usare sbt per costruirli.SBT: dipendenza da altri Progetto SBT senza pubblicare

Le seguenti proprietà sarebbe bello avere:

  1. Più persone lavorano sui diversi progetti, ed è per questo che non vuole avere un unico repository, ma piuttosto un repository per progetto.
  2. La creazione di un progetto dovrebbe essere semplice e tutte le dipendenze dovrebbero essere create automaticamente (se necessario). Cioè, se modifico "comune" e poi costruisco "b", questo dovrebbe prima creare "comune" e quindi andare a costruire "b".
  3. in grado di avere tutti i progetti in un IDE, in modo tale che il refactoring e simili IDE-task funzionano correttamente e tutti i progetti interessati vengono modificati in modo corretto.

Per quanto posso vedere, ci sono due possibilità per avere dipendenze di questo tipo in sbt; o usiamo sotto-progetti, o usiamo una dipendenza gestita (che viene spinta da qualche parte, ad es. localmente). Tuttavia, sembra che entrambe queste opzioni non forniscano né (1) né (2) sopra. In particolare

  • L'utilizzo di sottoprogetti ci obbliga a utilizzare un singolo repository, poiché tutto il sottoprogetto deve trovarsi nelle sottodirectory del progetto principale.
  • Pubblicazione dei progetti a livello locale e con le dipendenze gestito è ingombrante, come cambiare "comune" e quindi la costruzione di "b" solo raccoglie i cambiamenti in "comune", se quel progetto venne costruito e pubblicato la prima volta. Vedo che le dipendenze gestite sono utili in molti casi, ma per il nostro caso d'uso particolare non sembrano funzionare bene. Lavoriamo spesso su diversi progetti e li cambiamo allo stesso tempo. Per questo motivo, dover pubblicare spesso sembra eccessivamente complicato.

c'è davvero nessun modo per dire che un progetto di SBT dipende da un altro progetto SBT ad una certa (relativa) posizione, e avendo dato SBT quando per costruire la dipendenza?

risposta

6

con SBT è possibile utilizzare le dipendenze di origine.

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

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

In questo esempio verrà recuperato da git. Potresti essere in grado di specificare un percorso file su disco, anche se non riesco a trovare esempi. Forse

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

o

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

che sto lottando con questo me stesso - in questo momento im utilizzando il metodo publish-locale che sta funzionando bene.

+1

'dep val pigro = uri ("file: /// path/to")' funziona per me. Anche il percorso relativo funziona. Esempi: 'pigro val helloWorldProj = uri ("file: /// D:/EclipseProjects/helloworld")' O 'pigro val helloWorldProj = uri ("../ helloworld")' – dips

+0

E questi devono essere aggiunti alla file build.sbt se non sbaglio? –