Javarevisited
In breve, anche se Maven e ANT sono strumenti di compilazione la differenza principale è che maven fornisce anche la gestione delle dipendenze, il layout standard del progetto e la gestione del progetto. Sulla differenza tra Maven, ANT e Jenkins, più tardi è uno strumento di integrazione continua che è molto più di uno strumento di costruzione. Puoi impostare il tuo ambiente CI usando Jenkins o Hudson e costruire, testare e distribuire automaticamente il tuo progetto Java. Ora l’ultima, la differenza principale tra Jenkins e Hudson, entrambi provengono dallo stesso codice sorgente ma uno è una fonte chiusa mentre l’altro è open source. Potete leggere i dettagli in questo articolo.
Ora iniziamo una lunga storia, qual è la differenza tra Maven e ANT o la differenza tra Maven e Jenkins, o Maven vs Hudson sono alcune delle domande frequentemente discusse tra Java quando gli sviluppatori. Beh, tutti e quattro, ad esempio ANT, Maven, Jenkins e Hudson sono strumenti per aiutare gli sviluppatori Java nella costruzione, nei test di unità, nell’integrazione continua (CI) e nella gestione dei progetti.
In questo articolo Java, esploreremo ciascuno di Maven, ANT, Jenkins e Hudson per avere un’idea di base di cosa sono, quali vantaggi offrono e come vengono utilizzati nei progetti Java JEE. Solo per darvi un’idea di base, ANT è uno strumento di compilazione ben noto, probabilmente il più vecchio tra tutti. Uno strumento di compilazione è usato per creare deliverable come file JAR o WAR da sorgenti e risorse Java per il deployment.
Maven è venuto dopo ANT e offre molto più di uno strumento di compilazione. La differenza principale tra ANT e Maven è che in ANT è necessario definire tutto, cioè directory di origine, directory di costruzione, directory di destinazione, ecc mentre Maven adotta il principio della convenzione sulla configurazione.
Questo significa che Maven ha una struttura di progetto predefinita, cioè una directory standard per i file di origine, i file di test e le risorse. D’altra parte, Jenkins e Hudson sono lo strumento di integrazione continua, che ti dà il potere di automatizzare il tuo processo di compilazione e distribuzione.
Utilizzando Jenkins o Hudson puoi attivare la compilazione ogni volta che lo sviluppatore impegna il codice, per vedere se il progetto si sta compilando bene, per eseguire i test unitari, per creare una compilazione, o anche distribuire in QA o ambiente di produzione.
Similmente, puoi avere una compilazione giornaliera, notturna o settimanale stabilita in Jenkins o Hudson. Nella prossima sezione, capiremo Maven, ANT, Jenkins e Hudson in modo più dettagliato e capiremo la differenza tra loro.
Btw, se state appena iniziando con Maven, vi suggerisco di passare prima attraverso un corso completo su Maven come Apache Maven: Beginner to Guru per imparare alcuni fondamenti. Non solo ti aiuterà a costruire e distribuire i tuoi progetti Java e Spring Boot usando Maven, ma imparerai anche Maven stesso in profondità.
Maven vs ANT
Da quando Maven è stato rilasciato, molti programmatori Java confrontano Maven e ANT, cosa abbastanza naturale. Anche io ho impiegato un po’ di tempo per adottare Maven perché ero molto abituato al processo di compilazione di ANT. Alla fine, mi sono reso conto che Maven offre più convenienza come strumento di compilazione rispetto ad ANT e inoltre impone un modo comune di compilare le applicazioni Java tra più progetti, sviluppatori e organizzazioni.
Prima di passare a Maven, ho lavorato con script ANT molto complessi, infatti ogni progetto a cui lavoro ha una struttura di compilazione diversa dagli altri.
Per fare un rilascio, è necessario spendere molto tempo per capire l’intero processo di compilazione, ad esempio da dove arrivano le librerie, arrivano come JAR o il progetto le costruisce durante la compilazione, ecc. Maven risolve molti di questi problemi introducendo convenzioni standard e una migliore gestione delle dipendenze.
Se dobbiamo confrontare Maven e ANT, ecco la mia lista di differenze tra Maven e ANT :
1) Una grande differenza tra Maven e ANT è che Maven richiede meno configurazione di ANT perché lavora sul principio della convenzione sulla configurazione e assume ragionevoli default e.Ad esempio, il file sorgente java in ${basedir}/src/main/java, le risorse in ${basedir}/src/main/resources, i casi di test JUnit in ${basedir}/src/test/java, ecc.
Crea anche i file di classe Java in ${basedir}/target/classes e il file JAR in ${basedir}/target. D’altra parte, ANT richiede tutte queste directory fornite come configurazione, di solito nel file di build di ANT, ad esempio build.xml.
2) Un’altra differenza significativa tra Maven e ANT è la gestione delle dipendenze. Maven ha introdotto il concetto di repository, che è un luogo centrale per memorizzare tutte le librerie, JAR, ecc. Maven permette di usare un repository centrale di maven così come un repository locale e scaricare automaticamente le dipendenze durante il processo di compilazione.
Mentre i progetti basati su ANT usano generalmente ${lib} come directory per memorizzare le dipendenze. Cambiare e aggiornare le dipendenze è molto più facile in Maven che in ANT perché non è necessario scaricare manualmente le dipendenze. Avere un repository centrale a livello di organizzazione aiuta anche a rimuovere la ridondanza tra diversi progetti.
3) La terza e più importante differenza tra Maven e ANT è che Maven offre un’interfaccia coerente e comune per costruire progetti Java. Tutto quello che dovete fare è scaricare il progetto ed eseguire mvn install per costruirlo. Inoltre conoscendo le convenzioni di maven e guardando pom.xml, si può facilmente capire dove sono i file sorgente e quali sono le dipendenze del progetto.
4) Un’altra differenza tecnica tra ANT e Maven è che il task ANT non ha alcun ciclo di vita, è necessario definire gli obiettivi e le loro dipendenze. Mentre Maven ha un ciclo di vita, che viene invocato quando si eseguono comandi come mvn install. Maven esegue una serie di passi come risultato di questo comando per produrre artefatti, ad esempio un file JAR, che è la fine del ciclo di vita.
5) Maven applica anche una convenzione di denominazione standard per gli artefatti definita utilizzando groupId, artifactId e version. Inoltre, un’altra differenza tra ANT e Maven è che Maven è più di un semplice strumento di compilazione, agisce come uno strumento di gestione del progetto e può generare rapporti, ecc, anche se devo ancora usare questa caratteristica.
Maven vs Jenkins e Hudson
Jenkins e Hudson sono strumenti di integrazione continua, comunemente noti come framework CI. Permettono al progetto Java di automatizzare il processo di costruzione e distribuzione. Usando strumenti di CI come Hudson o Jenkins puoi creare automaticamente build orarie o giornaliere, puoi anche eseguire automaticamente i tuoi test unitari e puoi distribuire la build al tuo ambiente di QA o di produzione.
Questo aiuta se stai lavorando in un grande progetto e il team di sviluppo è distribuito in più luoghi. Gli strumenti CI possono attivare la compilazione ogni volta che lo sviluppatore impegna il codice e controllare se il progetto si sta compilando o meno.
A proposito, Jenkins e Hudson provengono dallo stesso albero sorgente. Hudson era un progetto originale che era open source e supportato da Sun.
Quando Oracle ha acquistato Sun, ha preso il controllo del nome Hudson e della piattaforma logistica di Hudson. Molti collaboratori open source non erano a loro agio con ciò che ha portato a Jenkins, che è praticamente guidato dalla comunità.
Se dobbiamo confrontare Maven e Jenkins o Hudson, la seguente sarebbe la mia lista di differenze tra Maven e Hudson o Jenkins :
1) La differenza principale tra Maven e Jenkins o Hudson è che Maven è uno strumento di costruzione che sa come costruire un progetto e Jenkins o Hudson fornisce un trigger per costruire. È possibile controllare quando innescare la compilazione automatica usando Jenkins o Hudson o qualsiasi strumento CI.
2) Jenkins può usare Maven come strumento di compilazione. Inoltre, Jenkins o Hudson possono fare molto di più che costruire applicazioni, possono eseguire tutti i test unitari, distribuire i risultati nei server configurati, ecc. Essenzialmente la differenza è che Maven è uno strumento di compilazione mentre Jenkins o Hudson è uno strumento di integrazione continua.
Questo è tutto sulla differenza tra Maven e ANT, Jenkins o Hudson, ecc. Maven è praticamente lo standard per la costruzione di progetti Java al giorno d’oggi e puoi personalizzarlo per adattarlo al tuo ambiente legacy basato su ANT. Alcune organizzazioni hanno anche strumenti CI come Jenkins che possono essere usati insieme a Maven per automatizzare il processo di compilazione, test e deploy.
Ulteriori apprendimenti
Fondamenti di Maven di Bryan Hansen
Corso Crash di Maven
Java Maven :101 Smetti di costruire programmi Java in modo difficile!