la layout Repository per grandi Maven progetti


13

Ho una grande applicazione (~ 50 moduli) utilizzando una struttura simile al seguente:

  • Applicazione
    • moduli di comunicazione
      • colori modulo di comunicazione
      • Modulo di comunicazione SSN
      • ecc. Modulo di comunicazione
      • modulo
      • moduli di servizio
    • Router
      • servizio Voting modulo
        • interfaccia Web modulo per voto
        • Votate collettore modulo per il voto
        • ecc per il voto
      • modulo di servizio Quiz
      • ecc modulo

Vorrei importare l'applicazione per Maven e Subversion. Dopo alcune ricerche ho scoperto che esistono due approcci pratici per questo.

Uno utilizza una struttura ad albero come quella precedente. Lo svantaggio di questa struttura è che hai bisogno di un sacco di tweaking/hack per far funzionare bene i rapporti multi-modulo con Maven. Un altro svantaggio è che in Subversion l'approccio standard trunk/tags/branches aggiunge ancora più complessità al repository.

L'altro approccio utilizza una struttura piatta, in cui esiste un solo progetto padre e tutti i moduli, i sottomoduli e le parti dei sottomoduli sono un figlio diretto del progetto padre. Questo approccio funziona bene per il reporting ed è più facile in Subversion, tuttavia sento di perdere un po 'la struttura in questo modo.

Quale strada sceglieresti a lungo termine e perché?

14

Abbiamo un'applicazione più ampia (più di 160 pacchetti OSGi in cui ogni pacchetto è un modulo Maven) e la lezione che abbiamo appreso e che continuiamo a imparare è che l'appartamento è migliore. Il problema con la semantica della codifica nella tua gerarchia è che perdi la flessibilità. Un modulo che al 100% dice "comunicazione" oggi potrebbe essere in parte "servizio" domani e quindi dovrai spostare le cose nel tuo repository e questo interromperà tutti i tipi di script, documentazione, riferimenti, ecc.

Quindi vorrei raccomandare una struttura piatta e codificare la semantica in un altro punto (ad esempio, un'area di lavoro IDE o documentazione).

Ho risposto a una domanda sul layout di controllo versione in dettaglio with examples at another question, potrebbe essere rilevante per la situazione.


3

Penso che sia meglio spianare la struttura della directory. Forse si vuole creare una convenzione di denominazione per le directory in modo tale da essere ben definite durante la visualizzazione di tutti i progetti, ma in definitiva non penso che sia necessaria tutta questa gerarchia in più.

Supponendo che si utilizzi Eclipse come IDE, tutti i progetti finiranno in un elenco semplice una volta importati comunque, in modo da non ottenere alcun guadagno dalle sottodirectory aggiuntive. Questo oltre al fatto che la configurazione è molto più semplice senza tutte le gerarchie extra rende la scelta abbastanza chiara nella mia mente.

Si potrebbe anche prendere in considerazione la combinazione di alcuni dei moduli. Non so nulla della tua app o del tuo dominio, ma sembra che molti di questi moduli a livello di foglia potrebbero essere più adatti come pacchetti o insiemi di pacchetti all'interno di un altro modulo di livello superiore. Sono tutto per mantenere le giare coese, ma a volte può essere troppo lontano.