Cosa fa Maven, in teoria e in pratica? Quando vale la pena usarlo? [chiuso]


156

Sto per iniziare un progetto Java solo per fare pratica. Ho letto di Maven, ma in realtà non capisco quando debba essere usato.

Puoi darmi qualche consiglio pratico? Maven aiuta molto? Cosa fa effettivamente Maven per il mio progetto?


Hej, dai un'occhiata a questa mia domanda su Maven, Spring e Roo. Ho usato molto Maven quando lavoravo con Eclipse e per accelerare i tempi di sviluppo. Ma ci sono alcuni problemi. Penso che tu debba capire il sistema di annotazione Java insieme a Maven. Ma dai un'occhiata alla domanda che ho collegato ..
mm24,

@ArtB dà una buona spiegazione di cosa sia Maven. Tuttavia, come ho detto nel mio commento alla sua risposta, non credo che dovresti usarlo. Se vuoi uno strumento di costruzione, usa Gradle. Scaricalo, installalo, quindi nel tuo progetto crea un file chiamato build.gradleche contiene solo una riga che dice apply plugin: 'java'. Supponendo che il tuo codice sorgente sia nella solita posizione ( src/main/java, unit test in src/test/java), ora puoi costruire, testare e impacchettare il tuo codice dicendo gradle build. Facile!
Tom Anderson,

2
Per usare Gradle dovrai imparare Groovy e sicuramente ti imbatterai nel progetto usando Maven, quindi vale comunque la pena imparare. Inoltre, capire Maven renderà più facile la comprensione di altri strumenti che sono venuti dopo.
Slitta

Cosa deve fare Maven con le annotazioni Java?
Slitta

1
+1 per Gradle, non solo è più vicino a casa per gli sviluppatori Java, può riutilizzare artefatti maven e può creare facilmente build non standard stackoverflow.com/questions/1163173/…
Kalpesh Soni

Risposte:


183

Cosa fa

Maven è uno "strumento di gestione della compilazione", serve per definire il modo in cui i tuoi .javafile vengono compilati .class, impacchettati in .jar(o .waro .ear) file, (pre / post) elaborati con strumenti, gestendo il tuo CLASSPATHe tutti gli altri tipi di attività necessarie costruisci il tuo progetto. È simile ad Apache Ant o Gradle o Makefile in C / C ++, ma cerca di essere completamente autonomo in esso e non dovresti avere bisogno di strumenti o script aggiuntivi incorporando altre attività comuni come il download e l'installazione delle librerie necessarie ecc.

È inoltre progettato attorno al tema "Portabilità build", in modo da non avere problemi con lo stesso codice con lo stesso buildscript che funziona su un computer ma non su un altro (questo è un problema noto, abbiamo VM di Windows 98 macchine poiché non siamo riusciti a compilare alcune delle nostre applicazioni Delphi altrove). Per questo motivo, è anche il modo migliore di lavorare su un progetto tra persone che usano IDE diversi poiché gli script Ant generati dall'IDE sono difficili da importare in altri IDE, ma oggigiorno tutti gli IDE comprendono e supportano Maven ( IntelliJ , Eclipse e NetBeans ). Anche se non ti piace Maven, finisce per essere il punto di riferimento per tutti gli altri strumenti di costruzione moderni.

Perché dovresti usarlo

Ci sono tre cose su Maven che sono molto belle.

  1. Maven sarà (dopo si dichiara che quelli che si sta utilizzando) scaricare tutte le librerie che si utilizza e le librerie che essi utilizzano per voi automaticamente. Questo è molto bello e rende ridicolmente semplice gestire molte librerie. Questo ti permette di evitare "l'inferno delle dipendenze" . E 'simile a quella di Apache Ant Ivy .

  2. Utilizza " Convenzione sulla configurazione " in modo che per impostazione predefinita non sia necessario definire le attività che si desidera eseguire. Non è necessario scrivere un passaggio di "compilazione", "test", "pacchetto" o "pulito" come si farebbe in Ant o in un Makefile. Metti i file nei punti in cui Maven li aspetta e dovrebbe funzionare fuori dal pipistrello.

  3. Maven ha anche molti plug-in che è possibile installare che gestiranno molte attività di routine dalla generazione di classi Java da uno schema XSD utilizzando JAXB alla misurazione della copertura dei test con Cobertura . Aggiungili al tuo pom.xmle si integreranno con tutto ciò che vuoi fare.

La curva di apprendimento iniziale è ripida, ma (quasi) ogni sviluppatore Java professionale utilizza Maven o desidera farlo. Dovresti usare Maven su ogni progetto, anche se non ti sorprendere se ti ci vuole un po 'di tempo per abituarti e che a volte vorresti poter fare semplicemente le cose manualmente, poiché imparare qualcosa di nuovo a volte fa male. Tuttavia, una volta che ti sarai veramente abituato a Maven, scoprirai che la gestione delle build non richiede quasi alcun tempo.

Come iniziare

Il miglior punto di partenza è " Maven in 5 minuti ". Ti farà iniziare con un progetto pronto per la codifica con tutti i file e le cartelle necessari impostati (sì, ti consiglio di usare l'archetipo di avvio rapido, almeno all'inizio).

Dopo aver iniziato, avrai bisogno di una migliore comprensione di come lo strumento deve essere utilizzato. Per questo " Better Builds with Maven " è il posto più completo per capire il modo in cui funziona, tuttavia, " Maven: The Complete Reference " è più aggiornato. Leggi il primo per capire, ma poi usa il secondo come riferimento.


12
Ci sono numerosi sviluppatori Java professionisti che non usano Maven e sono contenti di non farlo; alcuni di questi semplicemente rifiutano la sua complessità e inflessibilità e si attaccano alla formica o simili, ma un numero crescente di loro sono persone che sono passate ai successori di Maven come Gradle e Buildr. Questi successori ereditano da Maven l'idea di fornire un potente set di passaggi di build pronti all'uso, ma rendono immensamente più semplice aggiungere anche passaggi personalizzati. Data la loro esistenza, onestamente non penso che ci sia alcun motivo per usare Maven per nuovi progetti.
Tom Anderson,

5
C'è sempre la domanda su quanti dettagli inserire in una risposta, ma se sei uno sviluppatore Java medio che nel tuo ufficio è probabilmente Maven o l'inferno di formica merda (Ant + bash + perl + build computer configurato con percorsi magici). Se sei uno dei pochi fortunati a lavorare con gli sviluppatori A + in un buon ambiente con la libertà di scegliere, ci sono altre opzioni (Gradle è uno). Ma se lavori in un posto medio, Maven è lo strumento migliore che non consente ai tuoi colleghi di lavorare con qualcosa di appuntito.
Slitta

4
Non penso che devi essere uno sviluppatore A + per usare Gradle. Non vedo perché un'organizzazione che potrebbe adottare Maven non potrebbe adottare Gradle. È vero che Gradle ti consente di spararti al piede, come fa Ant, ma in un modo che Maven rende abbastanza difficile (e ho una collezione di piedi da tiro dei miei colleghi per dimostrarlo); questo è il compromesso per aver reso possibile fare cose che Maven rende praticamente impossibile.
Tom Anderson,

4
In termini di utilizzo di qualcosa come Gradle e di evitare i piedi da tiro, propongo una classificazione triage di programmatori. Alcuni programmatori non avranno timore di modificare gli script di build e di ottenere le cose più o meno giuste. Quelle persone sono utili. Alcuni programmatori hanno paura degli script di build e non li toccheranno. Quelle persone almeno non sono dannose; sono stato in una squadra di 12 uomini in cui solo due di noi hanno osato toccare la build, e in realtà ha funzionato piuttosto bene. Alcuni programmatori non hanno paura degli script di compilazione, ma li rovinano se li toccano. Quelle persone sono pericolose.
Tom Anderson,

1
quindi è come npm per Java
KJW il

9

Dal documento Sonatype :

La risposta a questa domanda dipende dalla tua prospettiva. La grande maggioranza degli utenti di Maven chiamerà Maven uno "strumento di costruzione": uno strumento utilizzato per creare artefatti distribuibili dal codice sorgente. Costruire ingegneri e project manager potrebbe riferirsi a Maven come qualcosa di più completo: uno strumento di gestione del progetto. Qual è la differenza? Uno strumento di compilazione come Ant si concentra esclusivamente su preelaborazione, compilazione, packaging, test e distribuzione. Uno strumento di gestione del progetto come Maven fornisce un superset di funzionalità presenti in uno strumento di creazione. Oltre a fornire funzionalità di creazione, Maven può anche eseguire report, generare un sito Web e facilitare la comunicazione tra i membri di un team di lavoro.

Consiglio vivamente di guardare il documento Sonatype e passare un po 'di tempo a guardare i plugin disponibili per capire il potere di Maven.

Molto brevemente, opera a un livello concettuale più elevato di (diciamo) Ant. Con Ant, dovresti specificare il set di file e risorse che vuoi costruire, quindi specificare come li vuoi raggruppare insieme e specificare l'ordine che dovrebbe avvenire in (clean / compilare / jar). Con Maven è tutto implicito. Maven si aspetta di trovare i tuoi file in luoghi particolari e funzionerà automaticamente con quello. Di conseguenza, impostare un progetto con Maven può essere molto più semplice, ma devi giocare secondo le regole di Maven!


Non l'ho votato a fondo, ma forse i downvoter hanno letto la tua citazione dalla propaganda Sonatype come un'approvazione implicita della filosofia totalitaria dello "strumento di gestione del progetto" di Maven.
Tom Anderson,

1
Non credo che tu abbia risposto alla domanda del PO, invece hai appena pubblicato lo spiel di marketing ... e che lo spiel è ridicolo dal momento che la "gestione del progetto" è molto più di quello che Maven serve a confondere più di quanto aiuti, A PARER MIO.
Slitta

2
@Brian Siamo spiacenti, se il mio commento precedente sembra fiammeggiante, ma lasciami riformulare: sento che il tuo commento spiega bene Maven solo se capisci già cos'è Maven, ma come punto di partenza iniziale non è utile.
Slitta

5

Mavenè uno strumento di costruzione. Insieme Anto Gradlesono Javastrumenti per la costruzione.
Se sei un principiante in Java, però costruisci semplicemente usando il tuo IDE poiché Mavenha una curva di apprendimento ripida.


Il supporto IDE per Maven in NetBeans è molto buono, rendendo quasi inesistente la curva di apprendimento.
Capitan Giraffe,
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.