Perché Maven? Quali sono i vantaggi? [chiuso]


131

Quali sono i principali vantaggi dell'utilizzo di Maven rispetto alla formica? Sembra essere più un fastidio che uno strumento utile. Uso maven 2, con il semplice Eclipse Java EE (no m2eclipse) e tomcat.

I sostenitori di Maven lo credono

  1. Maven ti consente di ottenere facilmente le dipendenze dei pacchetti

  2. Maven ti costringe ad avere una struttura di directory standard

Nella mia esperienza

  1. Capire le dipendenze dei pacchetti non è poi così difficile. Raramente lo fai comunque. Probabilmente una volta durante l'installazione del progetto e pochi altri durante gli aggiornamenti. Con Maven finirai per correggere dipendenze non corrispondenti, poms scritti male e fare comunque esclusioni di pacchetti.

  2. Ciclo lento FIX-COMPILE-DEPLOY-DEBUG, che uccide la produttività. Questa è la mia lamentela principale. Apporti una modifica, devi attendere l'avvio di build maven e attendere che venga distribuito. Nessuna distribuzione a caldo di sorta.

O sto solo sbagliando? Per favore, indicami la giusta direzione, sono tutto orecchi.


1
Sono davvero interessato al punto 2. Qualcun altro nota il lento ciclo di correzione-compilazione-distribuzione? o tutti lo sanno, ma tacciono dal momento che Maven è la cosa migliore che abbiamo / più comune / più bella. Creare una guerra / orecchio da dispiegare è abbastanza brutto, maven sta peggiorando le cose. Ci vogliono circa 5 secondi sul mio computer per visualizzare una modifica jsp su un progetto maven, su una struttura di directory esplosa? meno di 1 secondo Posso salvare più volte e compila solo l'ultima modifica, su Maven? ogni salvataggio innesca una build.
trix,

Forse maven non è il problema qui, ma supporto / plugin IDE? Tuttavia, Maven è in circolazione da un po 'di tempo, se non riusciamo a farlo bene, dovremmo spostare / inventare / proporre qualcos'altro? oltre a Ivy
trix il

2
@Javid Mentre il titolo della domanda è simile, il corpo della domanda è diverso dall'IMO e non lo considero un duplicato.
Pascal Thivent,


Per un secondo sembrò che parlassi di NuGet ...
micahhoover,

Risposte:


108

Capire le dipendenze dei pacchetti non è poi così difficile. Raramente lo fai comunque. Probabilmente una volta durante l'installazione del progetto e pochi altri durante gli aggiornamenti. Con Maven finirai per correggere dipendenze non corrispondenti, poms scritti male e fare comunque esclusioni di pacchetti.

Non è così difficile ... per i progetti di giocattoli. Ma i progetti a cui lavoro ne hanno molti, davvero molti, e sono molto felice di averli in modo transitorio, per avere uno schema di denominazione standardizzato per loro. Gestire tutto manualmente a mano sarebbe un incubo.

E sì, a volte devi lavorare sulla convergenza delle dipendenze. Ma pensaci due volte, questo non è inerente a Maven, questo è inerente a qualsiasi sistema che utilizza dipendenze (e sto parlando di dipendenze Java in generale qui).

Quindi con Ant, devi fare lo stesso lavoro tranne che devi fare tutto manualmente: prendere una versione del progetto A e le sue dipendenze, prendere una versione del progetto B e le sue dipendenze, capire te stesso quali versioni esatte usano, controllando che non si sovrappongano, controllando che non siano incompatibili, ecc. Benvenuti all'inferno.

D'altra parte, Maven supporta la gestione delle dipendenze e le recupererà in modo transitorio per me e mi fornisce gli strumenti di cui ho bisogno per gestire la complessità inerente alla gestione delle dipendenze : posso analizzare un albero delle dipendenze, controllare le versioni utilizzate nelle dipendenze transitive, escluderne alcune loro , se necessario, controllare il convergere in tutto moduli, ecc non c'è magia. Ma almeno hai supporto.

E non dimenticare che la gestione delle dipendenze è solo una piccola parte di ciò che offre Maven, c'è molto di più (nemmeno menzionando gli altri strumenti che si integrano perfettamente con Maven, ad esempio Sonar ).

Ciclo lento FIX-COMPILE-DEPLOY-DEBUG, che uccide la produttività. Questa è la mia lamentela principale. Apporti una modifica, devi attendere l'avvio di build maven e attendere che venga distribuito. Nessuna distribuzione a caldo di sorta.

Innanzitutto, perché usi Maven in questo modo? Io non. Uso il mio IDE per scrivere test, codice fino a quando non passano, refactoring, distribuzione, distribuzione a caldo ed esecuzione di una build Maven locale quando ho finito, prima di impegnarmi, per assicurarmi di non interrompere la build continua.

In secondo luogo, non sono sicuro che l'uso di Ant renderebbe le cose molto migliori. E per la mia esperienza, le build modulari di Maven che utilizzano dipendenze binarie mi danno tempi di costruzione più veloci rispetto alle tipiche build monolitiche di formiche. In ogni caso, dai un'occhiata a Maven Shell per un ambiente Maven pronto per (ri) usare (che è fantastico a proposito).

Quindi alla fine, e mi dispiace dirlo, non è proprio Maven che sta uccidendo la tua produttività, ma stai abusando dei tuoi strumenti. E se non sei soddisfatto, beh, cosa posso dire, non usarlo. Personalmente, sto usando Maven dal 2003 e non ho mai guardato indietro.


@Pascal, puoi dire quali strumenti stai usando? IDE, plugin, ecc. Ci stai dicendo che se cambio un file .properties o un file jsp, questo verrà distribuito a caldo senza fare un build maven? (forse hot deploy non è il termine corretto qui). Non ero chiaro con cosa intendevo con formica. Intendevo usare la directory esplosa standard durante lo sviluppo e usare ant per creare una guerra / orecchio prima del rilascio. Per una directory esplosa le regole sono semplici, copia / compila file da src a classi e non toccare il resto.
Trix,

continua ... Tuttavia, nei miei progetti, ciò che viene distribuito su Tomcat sono i barattoli dei moduli. Se cambio un .jsp, Mven non deve ricostruire quei barattoli?
trix,

4
Devi ammetterlo, la maggior parte dei progetti sono progetti giocattolo, ovvero semplici dipendenze. Questa è solo la legge della statistica.
Trix,

2
@trix, riguardo la formica a caldo contro maven: se non stai realizzando la formica per dispiegamento a caldo, perché stai usando Maven per lo stesso? Immagino che se usi la formica per lo stesso, ci vorrebbe almeno la stessa quantità di tempo ... non è vero?
Reddy,

2
Quindi Pascal, potresti per favore dirci come hai un progetto configurato per la natura Maven e non utilizzare il processo di compilazione per distribuire? Questo è il punto 2 della domanda iniziale. Mi chiedo come farlo, quindi apprezzo molto se sei in grado di darci una spiegazione chiara.

20

Maven può essere considerato uno strumento di sviluppo del progetto completo, non solo uno strumento di costruzione come Ant. Dovresti usare Eclipse IDE con il plugin maven per risolvere tutti i tuoi problemi.

Ecco alcuni vantaggi di Maven, citati nella pagina Vantaggi dell'utilizzo di Maven :

Henning

  • installazione rapida del progetto, nessun file build.xml complicato, solo un POM e via
  • tutti gli sviluppatori in un progetto usano le stesse dipendenze jar a causa di POM centralizzato.
  • ottenere una serie di report e metriche per un progetto "gratuitamente"
  • ridurre le dimensioni delle distribuzioni di origine, poiché i barattoli possono essere estratti da una posizione centrale

Emmanuel Venisse

  • sono disponibili molti obiettivi, quindi non è necessario sviluppare una parte specifica del processo di compilazione contrariamente a ANT, possiamo riutilizzare le attività ANT esistenti nel processo di compilazione con un plugin antrun

Jesse Mcconnell

  • Promuove la progettazione modulare del codice. semplificando la gestione di progetti mulitple consente di strutturare il progetto in parti logiche muliple, intrecciando queste parti mediante l'uso del rilevamento delle dipendenze nei file pom.
  • Applica la progettazione modulare del codice. è facile pagare il servizio al codice modulare, ma quando il codice si trova in progetti di compilazione separati è impossibile incrociare i riferimenti impollinati tra i moduli di codice a meno che non lo si consenta specificamente nella gestione delle dipendenze ... fallo adesso e correggilo in seguito 'implementazioni.
  • La gestione delle dipendenze è chiaramente dichiarata. con il meccanismo di gestione delle dipendenze devi provare a rovinare il tuo controllo delle versioni del vaso ... non c'è nessuno dei classici problemi di "quale versione di questo vaso fornitore è questa?" E configurarlo su un progetto esistente strappa la cima al disordine esistente se esiste quando sei costretto a creare versioni "sconosciute" nel tuo repository per far funzionare le cose ... o mentire a te stesso che conosci il versione attuale di ABC.jar.
  • Ciclo di vita fortemente tipizzato Esiste un ciclo di vita fortemente definito attraverso il quale un sistema software passa dall'avvio di una build alla fine ... e agli utenti è consentito mescolare e abbinare il proprio sistema al ciclo di vita invece di mettere insieme il proprio ciclo di vita. questo ha l'ulteriore vantaggio di consentire alle persone di spostarsi da un progetto all'altro e di parlare usando lo stesso vocabolario in termini di sviluppo del software

Vincent Massol

  • Maggiore slancio: la formica ora è ereditata e non si muove velocemente. Maven sta avanzando rapidamente e c'è il potenziale di avere molti strumenti di alto valore intorno a Maven (CI, progetto Dashboard, integrazione IDE, ecc.).

5
Mentre si vota verso il basso, si prega di fornire un motivo, che non è detto ma regola etica su StackOverflow.
YoK,

1
Non c'è niente di sbagliato nei riferimenti, ma devi davvero chiarire che il contenuto non è tuo.
Pascal Thivent,

Grazie. Farò in modo di citarlo oltre a menzionare da dove è stato fatto riferimento. a soli 30 giorni dispari su stackoverflow e ancora imparando l'arte :).
YoK,

11

Capire le dipendenze per piccoli progetti non è difficile. Ma una volta che inizi a gestire un albero delle dipendenze con centinaia di dipendenze, le cose possono facilmente sfuggire di mano. (Sto parlando per esperienza qui ...)

L'altro punto è che se usi un IDE con compilazione incrementale e supporto Maven (come Eclipse + m2eclipse), dovresti essere in grado di impostare edit / compilare / hot deploy e test.

Personalmente non lo faccio perché sono venuto a diffidare di questo modo di sviluppo a causa di esperienze negative in passato (pre Maven). Forse qualcuno può commentare se questo funziona davvero con Eclipse + m2eclipse.


Si potrebbe iniziare con Maven per ottenere tutte le dipendenze e poi copiarle nel suo progetto, giusto?
trix,

2
Suppongo che tu possa. Ma questo potrebbe rompersi se aggiorni le dipendenze del tuo progetto ... o se il tuo progetto dipendesse da istantanee.
Stephen C,

Voglio dire, ho 2 progetti, l'unico scopo del progetto maven è quello di ottenere dipendenze. Utilizzare il controllo versione per tenere traccia delle modifiche tra gli aggiornamenti delle dipendenze. Lo faccio comunque, solo così posso vedere le modifiche, nel caso in cui si rompe la mia build.
trix,

4
Ughh. Non è così che Maven è progettato per essere utilizzato. Uno dei grandi vantaggi di Maven è evitare di controllare le librerie dipendenti nel controllo della versione. Con il tuo approccio, ingombrerai il tuo VCS con molte versioni di molti file binari. E alcuni VCS sono particolarmente dannosi nella gestione dei file binari.
Stephen C,

2
Generalmente impari a fatica a essere molto stanco di qualsiasi tipo di magia quando scrivi programmi: -S
Thorbjørn Ravn Andersen,

9

Maven è uno degli strumenti in cui devi effettivamente decidere in anticipo che ti piace e vuoi usarlo, dal momento che passerai un bel po 'di tempo ad impararlo, e aver preso la decisione una volta per tutte ti permetterà di saltare tutti i tipi di dubbio durante l'apprendimento (perché ti piace e vuoi usarlo)!

Le convenzioni forti aiutano in molti luoghi - come Hudson che può fare meraviglie con i progetti Maven - ma inizialmente può essere difficile da vedere.

modifica: A partire dal 2016 Maven è l'unico strumento di compilazione Java in cui tutti e tre i principali IDE possono utilizzare i sorgenti immediatamente. In altre parole, l'uso di Maven rende la tua build indipendente dall'IDE. Ciò consente, ad esempio, l'utilizzo della profilazione di Netbeans anche se normalmente lavori in Eclipse


1
E anche il contrario è vero, molte persone arrivano al forno con odio preconcetto, perché non è una formica, ecc.
Goibniu,

L'opposto? Intendi?
Thorbjørn Ravn Andersen,

9

I vantaggi di Maven rispetto alla formica sono parecchi. Cerco di riassumere qui.

Convenzione sulla configurazione
Maven utilizza un approccio distintivo per il layout e l'avvio del progetto, che semplifica semplicemente saltare in un progetto. Di solito ci vogliono solo il checkount e il comando maven per ottenere i manufatti del progetto.

Modularizzazione del
progetto Le convenzioni del progetto suggeriscono (o meglio, costringono) lo sviluppatore a modulare il progetto. Invece di un progetto monolitico sei spesso costretto a dividere il tuo progetto in componenti secondari più piccoli, il che semplifica il debug e gestisce la struttura complessiva del progetto

Gestione delle dipendenze e ciclo di vita del progetto
Nel complesso, con una buona configurazione SCM e un repository interno, la gestione delle dipendenze è abbastanza semplice e si è nuovamente costretti a pensare in termini di ciclo di vita del progetto: versioni dei componenti, gestione delle versioni e così via. Un po 'più complesso della formica qualcosa, ma ancora una volta, un miglioramento della qualità del progetto.

Cosa c'è di sbagliato in Maven?
Maven non è facile. Il ciclo di compilazione (cosa viene fatto e quando) non è così chiaro all'interno del POM. Inoltre, sorgono alcuni problemi con la qualità dei componenti e le dipendenze mancanti nei repository pubblici.
L'approccio migliore (per me) è disporre di un repository interno per la memorizzazione nella cache (e il mantenimento) delle dipendenze e da applicare alla gestione delle versioni dei componenti. Per progetti più grandi dei progetti di esempio in un libro, ringrazierai Maven prima o dopo


6

Maven può offrire vantaggi per il tuo processo di costruzione utilizzando convenzioni e pratiche standard per accelerare il tuo ciclo di sviluppo e allo stesso tempo aiutarti a raggiungere un tasso di successo più elevato. Per uno sguardo più dettagliato su come Maven può aiutarti nel tuo processo di sviluppo, fai riferimento a I vantaggi dell'utilizzo di Maven.


3

Maven è un potente strumento di gestione dei progetti basato su POM (modello a oggetti del progetto). Viene utilizzato per la creazione, la dipendenza e la documentazione dei progetti. Semplifica il processo di compilazione come ANT. Ma è troppo avanzato di ANT. Maven aiuta a gestire: Build, Documentazione, Reporing, SCM, Release, Distribuzione. - maven repository è una directory di file JAR in pacchetto con file pom.xml. Maven cerca le dipendenze nei repository.


2

Non ho mai incontrato il punto 2? Puoi spiegare perché pensi che ciò influisca in qualche modo sulla distribuzione. Se non altro, Maven ti consente di strutturare i tuoi progetti in modo modulare che in realtà consente hot fix per i bug in un determinato livello e consente, ad esempio, lo sviluppo indipendente di un'API dal resto del progetto.

È possibile che tu stia cercando di raggruppare tutto in un singolo modulo, nel qual caso il problema non è affatto malvagio, ma nel modo in cui lo stai usando.


Sto usando semplice eclissi jee, maven 2 e tomcat. Ovviamente un'app Web. Se sto cambiando un file delle proprietà, o un jsp, per vedere le mie modifiche su Tomcat, Maven deve fare la sua build, creare una guerra / orecchio e distribuirlo su Tomcat. Questo è lento rispetto a se uso una struttura di directory esplosa.
trix,

1
@trix La distribuzione a caldo in Eclipse con Tomcat funziona e basta. Lo stai facendo male.
Pascal Thivent,

0

Questo avrebbe dovuto essere un commento, ma non si adattava alla lunghezza di un commento, quindi l'ho pubblicato come risposta.

Tutti i vantaggi menzionati in altre risposte sono ottenibili con mezzi più semplici rispetto all'utilizzo di Maven. Se, ad esempio, sei nuovo in un progetto, trascorrerai comunque più tempo a creare l'architettura del progetto, unendo i componenti, codificando piuttosto che scaricando barattoli e copiandoli nella cartella lib. Se hai esperienza nel tuo dominio, allora sai già come iniziare il progetto con quali librerie. Non vedo alcun vantaggio nell'usare Maven, specialmente quando pone molti problemi mentre fa automaticamente la "gestione delle dipendenze".

Ho solo una conoscenza di livello intermedio di Maven, ma vi dico che ho fatto grandi progetti (come ERP) senza usare Maven.

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.