2009-02-05 13 views
5

Stiamo eseguendo un progetto di grandi dimensioni con diverse lingue: Java, Python, PHP, SQL e Perl.Layout di directory di origine per lingua mista

Fino ad ora le persone hanno lavorato nei propri repository privati, ma ora vogliamo unire l'intero progetto in un unico repository. La domanda ora è: come dovrebbe apparire la struttura della directory? Dovremmo avere directory separate per ogni lingua, o dovremmo separarla per componente/progetto? Quanto bene python/perl/java fa fronte a un layout di directory comune?

risposta

6

La mia esperienza indica che questo tipo di layout è meglio:.

mylib/ 
    src/ 
     java/ 
     python/ 
     perl/ 
     .../ 
    bin/ 
     java/ 
     python/ 
     perl/ 
    stage/ 
    dist/ 

src è la vostra fonte, ed è l'unica cosa che il check-in

bin è dove "compilation" viene in durante la costruzione , e non è verificata in.

stage è dove le cose si copia durante la compilazione per prepararli per il confezionamento

dist è dove si mettono i manufatti di build

ho messo il modulo/component/biblioteca al vertice della gerarchia, perché io costruisco ogni modulo separatamente, e utilizzare un gestore di dipendenza di combinarli in base alle esigenze.

Naturalmente, le convenzioni di denominazione variano. Ma ho trovato che funziona in modo abbastanza soddisfacente.

+0

In questo layout sorgente, il livello del modulo è sopra o sotto il livello src /? Cioè mylib/src/java o/src/java/mylib? –

+0

Tengo separati tutti i miei moduli, perché li costruisco separatamente e uso un gestore delle dipendenze per combinarli. Per questo motivo, vorrei fare mylib/src/java. – Jared

+0

Modificato per riflettere la domanda lib. – Jared

2

Penso che la cosa migliore da fare sarebbe garantire che i vari moduli non dipendano dall'essere nella stessa directory (cioè separati per componente). Molte persone sembrano avere una paura mortale di questa idea, ma una buona serie di script di costruzione dovrebbe essere in grado di automatizzare qualsiasi dolore.

L'obiettivo finale sarebbe quello di rendere più semplice l'installazione dell'infrastruttura e quindi di lavorare su un singolo componente in modo estremamente semplice una volta impostato l'ambiente.

(È importante notare che provengo dai mondi Perl e CL, dove installiamo "moduli" in qualche posizione globale, come ~/perl o ~/.sbcl, piuttosto che includere ogni modulo con ciascun progetto, come Le persone Java lo fanno. Si potrebbe pensare che questo sarebbe un problema di manutenzione, ma finisce per non esserlo: con uno script che aggiorna ogni modulo dal repository git (o CPAN) su base regolare, è davvero il modo migliore.)

Edit: una cosa:

progetti hanno sempre dipendenze esterne. I miei progetti hanno bisogno di Postgres e di un'installazione Linux funzionante. Sarebbe assurdo impacchettare questo con il codice app nel controllo della versione - ma uno script per ottenere tutto il setup su una nuova workstation è molto utile.

Immagino che quello che sto cercando di dire, in un modo indiretto, forse, è che non penso che dovresti trattare i tuoi moduli interni in modo diverso dai moduli esterni.

Problemi correlati