Come gestisci le istantanee timestampate di maven-3 in modo efficiente?

Ora che maven-3 ha abbandonato il supporto per false per gli artefatti degli snapshot, sembra proprio che sia necessario utilizzare SNAPSHOT con data e ora. Soprattutto m2eclipse, che utilizza internamente maven 3, sembra essere interessato, le snapshot di aggiornamento non funzionano quando gli SNAPSHOT non sono univoci.

Sembrava la cosa migliore prima di impostare tutte le istantanee su uniqueVersion = false

Ora, non sembra un grosso problema passare alla versione con data e ora, dopotutto sono gestiti da un repository centrale di nexus, che è in grado di eliminare vecchi snapshot in intervalli regolari.

Il problema sono le workstation degli sviluppatori locali. Il loro repository locale diventa rapidamente molto grande con istantanee uniche.

Come affrontare questo problema?

In questo momento vedo le seguenti possibili soluzioni:

  • Chiedi agli sviluppatori di eliminare il repository a intervalli regolari (il che porta a un sacco di problemi, poiché richiede molto tempo per eliminarlo e anche più tempo per scaricare tutto il necessario)
  • Imposta alcuni script che eliminano tutte le directory SNAPSHOT dal repository locale e chiedono agli sviluppatori di eseguire quello script di volta in volta (meglio del primo, ma richiede ancora un po ‘di tempo per eseguire e scaricare le istantanee correnti)
  • usa il plugin dependence: purge-local-repository (ha dei problemi quando viene eseguito da eclipse, a causa dei file aperti, deve essere eseguito da ogni progetto)
  • configurare nix su ogni workstation e impostare un lavoro per pulire le vecchie istantanee (risultato migliore, ma non voglio mantenere più di 50 server nexus, più la memoria è sempre stretta sulle workstation degli sviluppatori)
  • smettere di usare SNAPSHOTS affatto

Qual è il modo migliore per evitare che il repository locale riempia lo spazio sul disco rigido?

Aggiornare:

Per verificare il beaviour e per dare maggiori informazioni ho impostato un piccolo server nexus, costruisco due progetti (a e b) e provo:

un:

 4.0.0 de.glauche a 0.0.1-SNAPSHOT   nexus nexus http://server:8081/nexus/content/repositories/snapshots    

B:

  4.0.0 de.glauche b 0.0.1-SNAPSHOT   nexus nexus http://server:8081/nexus/content/repositories/snapshots/     nexus nexus  true  http://server:8081/nexus/content/repositories/snapshots/     de.glauche a 0.0.1-SNAPSHOT    

Ora, quando uso Maven ed eseguo “deploy” su “a”, lo avrò

 a-0.0.1-SNAPSHOT.jar a-0.0.1-20101204.150527-6.jar a-0.0.1-SNAPSHOT.pom a-0.0.1-20101204.150527-6.pom 

nel repository locale. Con una nuova versione di timestamp ogni volta che eseguo il target di distribuzione. Lo stesso accade quando provo ad aggiornare Snapshots dal server nexus (chiudi “a” Project, cancellalo dal repository locale, crea “b”)

In un ambiente in cui vengono generate molte istantanee (si pensi al server hudson …), il reposioty locale si riempie di vecchie versioni velocemente

Aggiornamento 2:

Per testare come e perché questo non funziona ho fatto altri test. Ogni test viene eseguito su tutto pulito (de / glauche viene eliminato da entrambe le macchine e nexus)

  • mvn distribuire con Maven 2.2.1:

il repository locale sul computer A contiene snapshot.jar + snapshot-timestamp.jar

MA: solo un barattolo con timestamp in nexus, i metadati recitano:

   de.glauche a 0.0.1-SNAPSHOT   20101206.200039 1  20101206200039   
  • eseguire dipendenze di aggiornamento (sulla macchina B) in m2eclipse (incorporato m3 finale) -> repository locale ha snapshot.jar + snapshot-timestamp.jar 🙁
  • eseguire l’objective del pacchetto con Maven esterno 2.2.1 -> repository locale ha snapshot.jar + snapshot-timestamp.jar 🙁

Ok, provate con Maven 3.0.1 (dopo aver rimosso tutte le tracce del progetto a)

  • repository locale sulla macchina A sembra migliore, solo un barattolo non timestamp

  • solo un jar con timestamp in nexus, i metadati sono:

    de.glauche a 0.0.1-SNAPSHOT

      20101206.201808 3  20101206201808   jar 0.0.1-20101206.201808-3 20101206201808   pom 0.0.1-20101206.201808-3 20101206201808   
  • eseguire dipendenze di aggiornamento (sulla macchina B) in m2eclipse (incorporato m3 finale) -> repository locale ha snapshot.jar + snapshot-timestamp.jar 🙁

  • eseguire l’objective del pacchetto con Maven esterno 2.2.1 -> repository locale ha snapshot.jar + snapshot-timestamp.jar 🙁

Quindi, per ricapitolare: l’objective “deploy” di maven3 funziona meglio di 2.2.1, il repository locale sulla macchina di creazione sembra a posto. Ma il ricevitore finisce sempre con un sacco di versioni timestamed …

Che cosa sto facendo di sbagliato ?

Aggiornamento 3

Ho anche provato varie altre configurazioni, prima sostituisco nexus con artifactory -> stesso comportamento. Quindi utilizzare i client di linux maven 3 per scaricare le istantanee dal gestore repository -> repository locale ha ancora le istantanee con timestamp 🙁