Ci sono alcuni grandi discussioni e proposte come affrontare il numero di versione Maven ed erogazione continua (CD) (li aggiungerò dopo la mia parte della risposta).
Quindi prima la mia opinione sulle versioni di SNAPSHOT. In Maven, SNAPSHOT mostra che questo è attualmente in fase di sviluppo per la versione specifica prima del suffisso SNAPSHOT. Per questo motivo, strumenti come Nexus o il plugin di rilascio di Maven hanno un trattamento speciale per SNAPSHOTS. Per Nexus sono archiviati in un repository separato e sono autorizzati ad aggiornare più artefatti con la stessa versione di rilascio SNAPSHOT. Quindi uno SNAPSHOT può cambiare senza che tu lo sappia (perché non aumenti mai alcun numero nel tuo pom). Per questo motivo non consiglio di usare le dipendenze di SNAPSHOT in un progetto, specialmente in un mondo di CD, dato che la compilazione non è più affidabile.
SNAPSHOT come versione del progetto sarebbe un problema quando il progetto viene utilizzato da altri, a causa dei motivi sopra riportati.
Un altro problema di SNAPSHOT per me è che non è più tracciabile o riproducibile. Quando vedo una versione 0.0.1-SNAPSHOT in produzione ho bisogno di fare qualche ricerca per scoprire quando è stata costruita da quale revisione è stata costruita. Quando trovo una versione di questo software su un filesystem, ho bisogno di dare un'occhiata al pom.properties o al file MANIFEST per vedere se questa è una vecchia spazzatura o forse la versione più recente e più grande.
Per evitare la modifica manuale del numero di versione (soprattutto quando si costruiscono più build al giorno) lasciare che Build Server modifichi il numero. Così, per lo sviluppo vorrei andare con una versione
<major>.<minor>-SNAPSHOT
ma quando la costruzione di una nuova versione della build dei server potrebbe sostituire l'ISTANTANEA con qualcosa di più unico e rintracciabile.
Per esempio uno di questo:
<major>.<minor>-b<buildNumber>
<major>.<minor>-r<scmNumber>
Così il numero maggiore e minore può essere utilizzato per questioni di marketing o per semplicemente mostrare che un nuovo grande traguardo viene raggiunto e può essere modificato manualmente, quando mai lo vuoi . E il numero build (numero dal server di Continuous Integration) o il numero scm (Revision of SUbversion o GIT) rendono ogni release univoca e tracciabile. Quando si utilizza la revisione buildNumber o Subversion, le versioni del progetto sono anche ordinabili (non con i numeri GIT). Con buildNumber o scmNumber è anche abbastanza facile vedere quali cambiamenti ci sono in questa versione.
Un altro esempio è il controllo delle versioni dei StackOverflow che utilizzano
<year>.<month>.<day>.<buildNumber>
E qui i collegamenti mancanti:
Sto contrassegnando questo come la risposta corretta perché il video di You Tube è stato eccellente nel rispondere a questa domanda esattamente.Tuttavia, ho dovuto fare una pausa e riavvolgere alcune volte per ottenere dei punti più sottili. ho inserito un riassunto del processo raccomandato nel video nella mia risposta. – ams
Il video è abbastanza buono e ti aiuterà a caricare. @ 23m35s nel video, direi che Maven dovrebbe fare la maggior parte delle verifiche di sanità mentale a breve termine, come test unitari, controlli di copertura, test di integrazione, ecc ... tuttavia la consegna continua non si ferma qui. Per le più grandi organizzazioni di tipo SOA, la suddivisione della pipeline in fasi discrete è una pratica molto buona, ad esempio test funzionali con endpoint simulati, test delle prestazioni, test di integrazione, test UAT, verifica della conformità, analisi del codice statico, revisione della sicurezza, ecc. – user924272
Ottimo video. La mia unica preoccupazione è che cosa fanno le persone riguardo a tutti i "release candidate" nel repository di rilascio, che non vengono mai rilasciati ufficialmente? Abbiamo un programma di pulizia impostato per i nostri SNAPSHOT, tuttavia gli artefatti di rilascio sono conservati per sempre. Lo vedo usando un sacco di spazio su disco, sul lato delle cose del repository Maven. – Patrick