Qual è la differenza tra "mvn deploy" in un repository locale e "mvn install"?


95

Il mio team utilizza un repository Maven del team interno condiviso da un server di sviluppo utilizzando Apache. Eseguiamo anche il server Continuum CI sulla stessa macchina. Le build di Maven in Continuum vengono eseguite con l'obiettivo di "installazione", che copia l'elemento finale direttamente nella directory condivisa.

La domanda è: qual è la differenza tra l'aggiunta di file al repository condiviso utilizzando mvn installe utilizzando l'obiettivo di distribuzione (plug-in mvn-deploy)?

Mi sembra che l'utilizzo mvn deploycrei ulteriori problemi di configurazione, ma ho letto da qualche parte che l'installazione di file in un repository condiviso è una cattiva idea per qualche motivo correlato al funzionamento interno di Maven.

aggiornamento: ottengo le differenze funzionali tra deploye install; In realtà sono più interessato ai dettagli di basso livello in termini di quali file vengono creati nel repository Maven.

Risposte:


166

Ken, bella domanda. Dovrei essere più esplicito nella The Definitive Guide sulla differenza. "installa" e "distribuisci" hanno due scopi diversi in una build. "installazione" si riferisce al processo di installazione di un artefatto nel tuo repository locale. "deploy" si riferisce al processo di distribuzione di un artefatto in un repository remoto.

Esempio:

  1. Quando eseguo un grande progetto multi-modulo sulla mia macchina, di solito eseguo "mvn install". Questo installerà tutti gli artefatti software binari generati (di solito JAR) nel mio repository locale. Quindi, quando creo singoli moduli nella build, Maven recupererà le dipendenze dal repository locale.

  2. Quando arriva il momento di distribuire istantanee o versioni, eseguirò "mvn deploy". L'esecuzione di questo tenterà di distribuire i file su un repository o server remoto. Di solito eseguo la distribuzione a un gestore di repository come Nexus

È vero che l'esecuzione di "deploy" richiederà una configurazione aggiuntiva, dovrai fornire una sezione di gestione della distribuzione nel tuo POM.


@ Tim, quindi qual è esattamente il vantaggio mvn deploy? Quali vantaggi offre per la configurazione aggiuntiva richiesta in primo luogo?
Geek

4
Deploy è progettato per distribuire artefatti su un server remoto. È un caso d'uso completamente diverso dall'installazione.
Tim O'Brien

17

Dai documenti di Maven , sembra che sia solo una differenza in quale repository si installa il pacchetto:

  • install: installa il pacchetto nel repository locale, da utilizzare come dipendenza in altri progetti in locale
  • deploy: eseguito in un ambiente di integrazione o rilascio, copia il pacchetto finale nel repository remoto per condividerlo con altri sviluppatori e progetti.

Forse c'è un po 'di confusione nel fatto che "installa" sul server CI lo installa nel suo repository locale, che poi tu come utente stai condividendo?


4

"matt b" ha ragione, ma per essere precisi, l'obiettivo "install" copia il target compilato nel repository locale sul tuo file system; utile per piccoli cambiamenti tra progetti attualmente non destinati al gruppo completo.

L'obiettivo "deploy" lo carica nel tuo repository condiviso per quando il tuo lavoro è finito, e poi può essere condiviso da altre persone che lo richiedono per il loro progetto.

Nel tuo caso, sembra che "install" sia utilizzato per semplificare la gestione della distribuzione poiché il repository locale di CI è il repository condiviso. Se CI fosse su un'altra scatola, dovrebbe usare l'obiettivo "deploy".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.