Vorrei contrastare alcuni dei reclami presentati in questo forum:
Maven è tutto o niente. O almeno per quanto ho potuto capire dalla documentazione. Non puoi usare facilmente Maven come sostituto immediato di Ant e adottare gradualmente funzionalità più avanzate.
Non è vero. La grande vittoria di Maven è usarlo per gestire le tue dipendenze in modo razionale e se vuoi farlo in Maven e fare tutto il resto in Ant, puoi farlo. Ecco come:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
Ora hai un oggetto classpath denominato "maven.classpath" che contiene tutte le dipendenze maven definite nel file pom. Tutto ciò di cui hai bisogno è mettere il jar dei task di maven ant nella directory lib di ant.
Maven rende il processo di compilazione dipendente dalla connessione di rete.
La dipendenza predefinita e il processo di recupero dei plug-in dipendono da una connessione di rete, sì, ma solo per la build iniziale (o se si modificano le dipendenze o i plug-in in uso). Dopodiché tutti i barattoli vengono memorizzati nella cache locale. E se vuoi forzare la connessione senza rete, puoi dire a Maven di utilizzare la modalità offline.
Ti impone una struttura rigida sin dall'inizio.
Non è chiaro se questo si riferisca al formato del file o al problema di "convenzione contro configurazione". Per quest'ultimo, ci sono molti valori predefiniti invisibili come la posizione prevista dei file e delle risorse di origine java o la compatibilità dell'origine. Ma questa non è rigidità, è l'inserimento di valori predefiniti ragionevoli per te in modo da non doverli definire esplicitamente. Tutte le impostazioni possono essere sovrascritte abbastanza facilmente (anche se per un principiante può essere difficile trovare nella documentazione come cambiare certe cose).
Se stai parlando del formato del file, beh, questo è coperto nella risposta alla parte successiva ...
È basato su XML, quindi è difficile da leggere come lo era ANT.
Prima di tutto, non vedo come puoi lamentarti del fatto che qualche aspetto di qualcosa "non è meglio di formica" come giustificazione per una cattiva reputazione. In secondo luogo, sebbene sia ancora XML, il formato dell'XML è molto più definito. Inoltre, poiché è così definito, è molto più facile creare un editor thick client sensato per un POM. Ho visto pagine lunghe e creare script che saltano dappertutto. Qualsiasi editor di script di build di formiche non lo renderà più appetibile, solo un altro lungo elenco di attività interconnesse presentate in un modo leggermente diverso.
Detto questo, ci sono alcune lamentele che ho visto qui che hanno o hanno avuto una certa validità, l'essere più grande
- La documentazione è scarsa / mancante
- Build riproducibili
- L'integrazione di Eclipse è pessima
- Bug
A cui la mia risposta è duplice. Innanzitutto, Maven è uno strumento molto più giovane di Ant o Make, quindi devi aspettarti che ci vorrà del tempo per raggiungere il livello di maturità di quelle applicazioni. Il secondo è, beh, se non ti piace, aggiustalo . È un progetto open source e usarlo e poi lamentarsi di qualcosa che chiunque può contribuire a risolvere mi sembra abbastanza assurdo. Non ti piace la documentazione? Contribuisci a renderlo più chiaro, più completo o più accessibile a un principiante.
Il problema delle build riproducibili si suddivide in due problemi, intervalli di versioni e aggiornamenti automatici dei plug-in Maven. Per gli aggiornamenti del plug-in, beh, a meno che non ti assicuri, quando ricostruisci un progetto un anno dopo, di utilizzare lo stesso identico JDK e la stessa identica versione di Ant, beh questo è lo stesso problema con un nome diverso. Per gli intervalli di versione, consiglio di lavorare su un plugin che produrrà un pom temporaneo con versioni bloccate per tutte le dipendenze dirette e transitive e lo renderà parte del ciclo di vita del rilascio di Maven. In questo modo i poms della build di rilascio sono sempre descrizioni esatte di tutte le dipendenze.