Attualmente sto lavorando per ottimizzare una generazione di un progetto Maven multi-modulo. Il progetto consiste di circa 90 moduli Maven. In generale ci sono alcune librerie trasversali che compongono il nucleo e poi ci sono circa 15 "moduli applicativi" che costituiscono l'intera applicazione (Che viene poi distribuito come in una GUERRA)Creazione di un modulo multi-modulo creazione e rilascio di singoli moduli in modo indipendente?
Ora in generale l'intero progetto ha un versione principale "2.5" quindi quando una nuova release principale viene eseguita tutti i "moduli dell'applicazione" hanno la stessa versione "2.5.0". Fin qui tutto bene.
Se un modulo ha un bug che deve essere corretto o deve essere migliorato, deve essere rilasciata una nuova versione di quel "modulo dell'applicazione". Quindi, ad esempio, il modulo A ha un bug corretto, quindi A.jar dovrebbe essere nella versione "2.5.1" mentre il resto dovrebbe essere ancora "2.5.0".
genitore (2.5.0-SNAPSHOT - Modulo A (2.5.1-SNAPSHOT) - Modulo B (2.5.0-SNAPSHOT) - Modulo C (2.5.2-SNAPSHOT) - Guerra (2.5. 3-SNAPSHOT) < - 3 alla fine, perché C aveva 2 ri-rilasci e A uno ed è stato rilasciato dopo ogni rilascio del modulo per semplicità
Ci siamo accontentati di gestire le versioni degli artefatti nel master pom così non È necessario aggiornare le versioni di dipendenza di ciascun artefatto dopo aver rilasciato un modulo.
Così ora ogni volta che un "modulo di applicazione" aggiornato è pronto, usiamo il software rilascia il plugin per eseguire il rilascio di quel modulo (Stiamo rilasciando un modulo, non l'intero progetto). Quindi diciamo che stiamo rilasciando il modulo A nella versione 2.5.4, con il risultato che A.jar viene distribuito come versione 2.5.4 e finendo aggiornando il codice del modulo in 2.5.5-SNAPSHOT.
Al termine, è necessario aggiornare la versione nel master pom, quindi tutti i moduli continuano a fare riferimento alla versione corretta.
grazie alla sezione dependencyManagement del maestro pom, se io costruisco il modulo guerra, si preleva automaticamente la nuova versione del modulo A.
Ora viene la parte difficile: non appena tutti i moduli vengono rilasciati, dovrebbe essere rilasciata una nuova versione dell'applicazione Web. Questo dovrebbe contenere tutti i Moduli non modificati così come quelli appena rilasciati. Attualmente sto lottando su come farlo. Se dipendo dalla versione genitore dei poms, la versione conterrà le versioni SNAPSHOT (tutte le versioni con incremento troppo alto), che io e il plugin di rilascio non consentono.
Quale sarebbe la soluzione migliore per questo dilemma?
Ho avuto un'idea di out-source della gestione delle dipendenze su un pom separato, che viene poi importato nel master dependomsManagement utilizzando l'ambito "import".
Questa specie di szenario è un'idea stupida? Esistono alternative allo sviluppo e alla manutenzione di una grande applicazione multi-modulo come questa? Non è possibile avere semplicemente tutte le versioni sincronizzate utilizzando il plugin di rilascio sull'intero progetto, poiché l'applicazione è grande e le applicazioni client devono caricare versioni di moduli aggiornate. Alcuni dei nostri clienti hanno connessioni molto lente, quindi distribuire tutti i moduli ogni volta li renderebbe davvero infelici.
aiuto molto apprezzato,
Chris
Hi noahz, Grazie per questa spiegazione ha aiutato. Mi sono reso conto che avrebbe funzionato se i miei moduli non avessero dipendenze l'uno con l'altro. Sfortunatamente lo fanno Avevo un'altra idea di come questo problema potesse essere risolto e creato una nuova risposta (può scrivere in questo modo il testo ;-)) –