Abbiamo un progetto Maven multi-modulo di grandi dimensioni. Con l'obiettivo di aumentare la produttività dello sviluppo, di recente abbiamo iniziato a distribuire istantanee su un repository remoto (tramite build centrale) e abbiamo introdotto i profili maven, il che significa che gli utenti devono solo controllare e creare un sottoinsieme di moduli e scattare istantanee per il resto. Abbiamo anche impostato la nostra politica di aggiornamento sugli archivi remoti su "mai", per garantire che sia esplicita quando vogliamo aggiornare le istantanee locali. Un tipico comando è quindi; mvn -Pref -U installazione pulita.Consenti istantanee create localmente per ignorare istantanee remote più recenti
Ora, nel reattore di esperti, la compilazione per i moduli definiti nel profilo funziona perfettamente, utilizzando le istantanee per le loro dipendenze, incluso il download di quelli aggiornati dal repository remoto (nota importante, per assicurarsi di avere un set coerente di istantanee, la nostra distribuzione centrale è di tutte le istantanee del modulo del nostro progetto, anche se solo un paio di esse sono state modificate).
L'attacco sembra essere quando Maven sta quindi risolvendo le dipendenze su quei moduli creati localmente da moduli che esistono al di fuori del profilo - se uno snapshot è stato distribuito in remoto dalla creazione di tale modulo, allora Maven lo vede come un versione più aggiornata e procede al download e sovrascrivere lo snapshot creato localmente. Ciò può causare interruzioni in cui altri moduli si aspettano il modulo modificato localmente.
Fondamentalmente mi piacerebbe avere un'opzione come 'usa snapshot costruito localmente' all'interno di qualsiasi modulo nel mio profilo su qualsiasi istantanea remota, anche se il timestamp indica che lo snapshot remoto è più recente.
Cosa hanno fatto altre persone in questo scenario?
grazie,
Paul
'Ciò può causare interruzioni in cui altri moduli si aspettano il modulo modificato localmente. Se il modulo è stato modificato localmente, è sufficiente compilarlo e si avrà lo snapshot più recente nel repository locale e verrà utilizzato per la generazione. O non capisco qualcosa? –
Questo è davvero quello che faccio. Il problema sembra sorgere quando si dice che un modulo successivo ha una dipendenza da questo modulo costruito localmente. Maven a questo punto controlla se uno snapshot remoto ha un timestamp più tardi di questo snapshot locale e in tal caso scarica e installa quella snapshot nel mio repository locale sovrascrivendo il mio modulo creato localmente. –
Btw apprezzo che parte di questo problema è che sto distribuendo tutte le istantanee nella mia build centrale, anche se non tutte sono cambiate ... Non sono sicuro di come impostare una build/deploy che possa essere distribuita in modo intelligente solo cambiata modules –