2009-06-14 18 views
10

Ho un paio di domande sulle best practice di Maven e sulla gestione dei repository.Best practice Maven

Nel mio ambiente, non voglio uscire nel repository centrale di Maven, ma piuttosto archiviare tutto in un repository interno. Dovrei semplicemente richiedere a ciascun utente di inserire le informazioni nel file settings.xml che disabilita l'uso delle istantanee o dei rilasci dal repository maven o dovrebbe essere in un file POM?

Inoltre, vorrei che tutti gli utenti si trovassero nello stesso repository aziendale. Queste informazioni sul repository dovrebbero essere inserite nel pom o in settings.xml? Se è nel pom, in che modo maven saprà di andare nel repository dal momento che ha bisogno di sapere dove si trova il repository?

risposta

6

In un progetto di grandi dimensioni, è preferibile disporre di diversi repository.

  1. Il proxy/cache aziendale memorizza i jar donwloaded localmente in modo che la società non diventi dipendente dalla disponibilità di siti esterni. È accessibile come un normale repository ma è un gateway per gli archivi pubblici.

  2. Il repository dell'azienda per le librerie rilasciate è limitato, contiene librerie interne. Questi sono framework che vengono "promossi" dai repository del progetto al repository dell'azienda perché possono essere utili per tutti i progetti.

  3. I repository di progetto contengono gli artefatti utilizzati dal progetto. Può contenere artefatti di progetti secondari e così via. Ogni sviluppatore di un progetto dovrebbe essere in grado di pubblicare qualcosa qui.

Il punto in cui si inseriscono le impostazioni è una questione di gusti. Ho messo queste cose nel settings.xml. Perché se cambia l'indirizzo dei repository interni dovresti altrimenti modificare i progetti.

+0

Questo è tutto corretto - io consiglierei di guardare in nesso (http://nexus.sonatype.org/) per una buona soluzione per tutti quanto sopra. –

+0

Grazie. Sto usando Apache's Archiva per la sua semplicità, ma guarderò anche al Nexus. In questo momento stiamo lavorando a un progetto piuttosto piccolo, cercando solo di mettere queste cose a posto presto. –

+1

+1 su Nexus. È semplicissimo da configurare e utilizzare. –

10

Punto uno: Installa il nesso su un server nella LAN. È eccellente - facile da installare (davvero, solo un paio di minuti!) E solido. Abbiamo circa 50 ingegneri e molti server CI che ci battono tutto il giorno ed è rimasto stabile per molti mesi. Diciamo che l'hai installato su un server chiamato "nexus.local" nel tuo DNS.

Fase due: Copiare il settings.xml da http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html, correggere il nome host, se necessario, si impegnano al vostro sistema di codice sorgente, e dire a tutti gli sviluppatori di copiare nel loro ~/.m2/settings.xml.

Passo tre: imposta correttamente pom.xml del tuo progetto. Si vorrà un "POM genitore" che definisce una sezione "distributionManagement" che sembra qualcosa di simile:

<distributionManagement> 
    <snapshotRepository> 
     <id>nexusSS</id> 
     <name>Nexus Snapshot Repository</name> 
     <url>http://nexus.local:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
    <repository> 
     <id>nexusRelease</id> 
     <name>Nexus Release Repository</name> 
     <url>http://nexus.local:8081/nexus/content/repositories/releases</url> 
    </repository> 
    </distributionManagement> 

Fase quattro: enable "mvn distribuire" - Andare alla UI Nexus (qualcosa come http://nexus.local:8081/nexus), fare clic sugli utenti, fare clic su "distribuzione" e assegnargli una password. Quindi modificare il tuo ~/.m2/settings.xml e aggiungere questo:

<settings> 
    ... 
    <servers> 
    <server> 
     <id>nexus</id> 
     <username>deployment</username> 
     <password>PASSWORD</password> 
    </server> 
    </servers> 
</settings> 

Verificare che funziona eseguendo "mvn distribuire", e che dovrebbe essere installata artefatti del vostro progetto in Nexus.

Punto cinque: Leggere questo eccellente documentazione per Maven: http://www.sonatype.com/products/maven/documentation/book-defguide

+2

Per "Fase quattro" non si desidera che l'ID del server corrisponda a quello dell'ID in distributionManagement nel passaggio tre? – Nicholas