Il modo migliore per strutturare un repository Git per Maven

18

Ho bisogno di alcuni consigli su come strutturare i nostri progetti in Git. Usiamo Java e Maven è il nostro strumento di costruzione. Maven kinda presume che tutti i tuoi progetti abbiano un antenato comune alla fine. Maven può anche essere una vera regina del dramma quando le cose non sono impostate esattamente nel modo in cui la fondazione Apache imposta i loro progetti (chiunque usi il plugin di rilascio probabilmente sa di cosa sto parlando).

Vogliamo un gen padre di primo livello che controlli le versioni dei plugin e costruisca la configurazione (repo config, quali risorse da compilare, convenzioni di denominazione, versioni dei plugin, ecc.). Maven vorrebbe che tutti i nostri progetti IT fossero in sottocartelle di quel progetto principale. Ciò implica un massiccio repo Git per l'organizzazione.

Questo renderà un ambiente molto rumoroso. Se ci sono due team che lavorano su progetti non correlati, dovranno costantemente unirsi alle altre squadre. Idealmente mi piacerebbe avere un repository per progetto.

Ma questo tipo di scontri con il modello estremamente gerarchico di Maven, che richiede sotto-progetti sono sotto-cartelle.

Ho bisogno di qualche consiglio su come le persone hanno riconciliato questi due modelli ... grazie!

    
posta Jonathan S. Fisher 19.05.2013 - 22:29
fonte

2 risposte

17

Hai 2 opzioni:
1. Via Git: usa i sottomoduli. Ecco una documentazione su come git gestisce i sottomoduli git submodules . Personalmente non l'ho usato ma sembra adattarsi al tuo problema.
2. Per via del maven: in Maven non è obbligatorio che il tuo progetto di root (configurazione) sia gerarchicamente la directory principale di tutti i tuoi progetti. Puoi avere una struttura del genere:

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

la configurazione, project1 e project2 sono sullo stesso livello di directory e ognuno potrebbe essere un repository git. Quando si crea progetto1 o progetto2 si esegue il comando maven da project1 o project2 level e maven proverà a recuperare la parent (configurazione) dal repository maven non dalla directory padre. Dovresti prestare attenzione alle versioni. Raccomanderei in project1 o project2 di mantenere un riferimento a un genitore (configurazione) con una versione di rilascio. Per fare un rilascio devi farlo in 2 fasi: prima rilascia la configurazione e rilascia il secondo progetto. Project1 e project2 possono evolversi indipendentemente e non devono avere la stessa versione di configurazione di un genitore.

Solo per casi speciali quando vuoi avere sia la configurazione che i progetti come versioni di SNAPSHOT, in project1 o project2 puoi usare il tag <relativePath> all'interno di <parent> tag per puntare al tuo percorso locale di configurazione. Non lo consiglio perché creerà problemi sull'ambiente di sviluppo (almeno per me in Eclipse)

Mi scuso per il mio inglese.

    
risposta data 20.05.2013 - 22:23
fonte

Leggi altre domande sui tag