Qual è la differenza tra & # 8220; mvn deploy & # 8221; in un repository locale e & # 8220; mvn install & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/207281

  •  03-07-2019
  •  | 
  •  

Domanda

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

La domanda è: qual è la differenza tra l'aggiunta di file al repository condiviso usando mvn install e l'utilizzo dell'obiettivo deploy (plugin mvn-deploy)?

Mi sembra che l'uso di mvn deploy crei ulteriori problemi di configurazione, ma ho letto da qualche parte che l'installazione di file in un repository condiviso è una cattiva idea per qualche ragione legata al funzionamento interno di Maven.

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

È stato utile?

Soluzione

Ken, bella domanda. Dovrei essere più esplicito nella La guida definitiva su la differenza. & Quot; installare " e " deploy " servono due scopi diversi in una build. & Quot; installare " si riferisce al processo di installazione di un artefatto nel repository locale. & Quot; distribuire " si riferisce al processo di distribuzione di un artefatto in un repository remoto.

Esempio:

  1. Quando eseguo un grande progetto multi-modulo su una mia macchina, di solito eseguo " mvn install " ;. Questo installerà tutti i manufatti del software binario 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 snapshot o versioni, eseguirò " mvn deploy " ;. L'esecuzione di questo tenterà di distribuire i file in un repository o server remoto. Di solito eseguirò la distribuzione in un gestore di repository come Nexus

È vero che eseguire " deploy " richiederà una configurazione aggiuntiva, dovrai fornire una sezione di gestione delle risorse nel tuo POM.

Altri suggerimenti

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

  • installa - installa il pacchetto nel repository locale, per usarlo come dipendenza in altri progetti localmente
  • deploy: eseguito in un ambiente di integrazione o rilascio, copia il pacchetto finale nel repository remoto per la condivisione con altri sviluppatori e progetti.

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

" matt b " ha ragione, ma per essere precisi, l '"installazione" goal copia il target creato nel repository locale sul tuo file system; utile per piccole modifiche tra progetti non attualmente destinati al gruppo completo.

Il " deploy " goal lo carica nel tuo repository condiviso per quando il tuo lavoro è finito e quindi può essere condiviso da altre persone che lo richiedono per il loro progetto.

Nel tuo caso, sembra che " install " viene utilizzato per semplificare la gestione della distribuzione poiché il repository locale di CI è il repository condiviso. Se l'elemento della configurazione si trovava su un'altra casella, avrebbe dovuto utilizzare il comando "deploy " obiettivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top