Javarevisited

Pe scurt, deși Maven și ANT sunt instrumente de construire, principala diferență este că maven oferă, de asemenea, gestionarea dependențelor, aspectul standard al proiectului și gestionarea proiectului. În ceea ce privește diferența dintre Maven, ANT și Jenkins, acesta din urmă este un instrument de integrare continuă care este mult mai mult decât un instrument de construire. Puteți să vă configurați mediul de IC folosind Jenkins sau Hudson și să vă construiți, testați și implementați automat proiectul Java. Acum, în sfârșit, principala diferență dintre Jenkins și Hudson, ambele provin din același cod sursă, dar unul este o sursă închisă, în timp ce celălalt este open source. Puteți citi detaliile în acest articol.
Acum să începem o poveste lungă, care este diferența dintre Maven și ANT sau diferența dintre Maven și Jenkins, sau Maven vs Hudson sunt unele dintre întrebările frecvent discutate în rândul dezvoltatorilor Java atunci când dezvoltatorii. Ei bine, toate cele patru, de exemplu ANT, Maven, Jenkins și Hudson sunt instrumente care ajută dezvoltatorii Java la construirea, testarea unitară, integrarea continuă (CI) și gestionarea proiectelor.
În acest articol Java, vom explora fiecare dintre Maven, ANT, Jenkins și Hudson pentru a obține o idee de bază despre ce sunt, ce beneficii oferă și cum sunt utilizate în proiectele Java JEE. Doar pentru a vă oferi o idee de bază, ANT este un instrument de construire bine cunoscut, probabil cel mai vechi dintre toate. Un instrument de compilare este utilizat pentru a crea livrabile, cum ar fi fișierul JAR sau fișierul WAR, din sursa și resursele Java pentru implementare.
Maven a venit după ANT și oferă mult mai mult decât un instrument de compilare. Principala diferență între ANT și Maven este că în ANT trebuie să definiți totul, adică directorul sursă, directorul de construcție, directorul țintă etc., în timp ce Maven adoptă principiul Convenției în locul configurației.
Aceasta înseamnă că Maven are o structură de proiect predefinită, adică un director standard pentru fișierele sursă, fișierele de testare și resurse. Pe de altă parte, Jenkins și Hudson sunt instrumente de integrare continuă, care vă oferă puterea de a vă automatiza procesul de construire și desfășurare.
Cu ajutorul lui Jenkins sau Hudson puteți declanșa construirea ori de câte ori dezvoltatorul comentează codul, pentru a vedea dacă proiectul se compilează bine, pentru a rula testele unitare, pentru a crea o construcție sau chiar pentru a desfășura în mediul QA sau de producție.
În mod similar, puteți avea un proces de construire zilnică, nocturnă sau săptămânală stabilit în Jenkins sau Hudson. În secțiunea următoare, vom înțelege Maven, ANT, Jenkins și Hudson mai în detaliu și vom înțelege diferența dintre ele.
Btw, dacă sunteți la început cu Maven, vă sugerez să parcurgeți mai întâi un curs Maven cuprinzător, cum ar fi Apache Maven: Beginner to Guru, pentru a învăța câteva elemente fundamentale. Nu numai că vă va ajuta să vă construiți și să vă implementați proiectele Java și Spring Boot folosind Maven, dar și să învățați Maven în profunzime.

Maven vs ANT

De când Maven a fost lansat, mulți programatori Java compară Maven și ANT, ceea ce este destul de natural. Chiar și mie mi-a luat ceva timp să adopt Maven, deoarece eram foarte obișnuit cu procesul de construire ANT. În cele din urmă, mi-am dat seama că Maven oferă mai multă comoditate ca instrument de construire decât ANT și, de asemenea, impune un mod comun de construire a aplicațiilor Java între mai multe proiecte, dezvoltatori și organizații.
Până la trecerea la Maven, am lucrat cu scripturi ANT foarte complexe, de fapt, fiecare proiect la care lucrez are o structură de construire diferită de a celorlalți.
Pentru a face o versiune, trebuie să petreceți un timp considerabil pentru a înțelege întregul proces de construire, de exemplu, de unde vin bibliotecile, vin sub formă de JAR sau proiectul le construiește în timpul construirii, etc. Maven rezolvă multe dintre aceste probleme prin introducerea unei convenții standard și o mai bună gestionare a dependențelor.
Dacă trebuie să comparăm Maven și ANT, iată lista mea de diferențe între Maven și ANT :

1) O diferență majoră între Maven și ANT este că Maven necesită mai puțină configurare decât ANT, deoarece funcționează pe principiul convenției în detrimentul configurației și își asumă valori implicite rezonabile e.g. fișierul sursă java în ${basedir}/src/main/java, resursele în ${basedir}/src/main/resources, cazurile de testare JUnit în ${basedir}/src/test/java, etc.
De asemenea, creează fișiere de clasă Java în ${basedir}/target/classes și fișiere JAR în directorul ${basedir}/target. Pe de altă parte, ANT are nevoie de toate aceste directoare furnizate ca și configurație, de obicei în fișierul de construcție ANT, de exemplu, build.xml.
2) O altă diferență semnificativă între Maven și ANT este gestionarea dependențelor. Maven a introdus conceptul de depozit, care este un loc central pentru a stoca toate bibliotecile, JAR-urile etc. Maven vă permite să utilizați un depozit central maven, precum și un depozit local și să descărcați automat dependențele în timpul procesului de construire.
În timp ce proiectele bazate pe ANT utilizează în general ${lib} ca director pentru a stoca dependențele. Schimbarea și actualizarea dependențelor este mult mai ușoară în maven decât în ANT, deoarece nu este nevoie să descărcați manual dependențele. Faptul de a avea un depozit central la nivelul întregii organizații ajută, de asemenea, la eliminarea redundanței în diferite proiecte.
3) A treia și cea mai importantă diferență între Maven și ANT este că Maven oferă o interfață consistentă și comună pentru a construi proiecte Java. Tot ce trebuie să faceți este să descărcați proiectul și să rulați mvn install pentru a-l construi. De asemenea, cunoscând convențiile maven și uitându-se la pom.xml, se poate înțelege cu ușurință unde se află fișierele sursă și care sunt dependențele proiectului.

4) O altă diferență tehnică între ANT și Maven este că sarcina ANT nu are niciun ciclu de viață, trebuie să definiți țintele și dependențele lor. În timp ce Maven are un ciclu de viață, care este invocat atunci când executați comenzi precum mvn install. Maven execută o serie de pași ca urmare a acestei comenzi pentru a produce artefacte, de exemplu, un fișier JAR, care reprezintă sfârșitul ciclului de viață.
5) Maven aplică, de asemenea, o convenție de denumire standard pentru artefactele definite folosind groupId, artifactId și version. De asemenea, încă o diferență între ANT și Maven este că Maven este mai mult decât un simplu instrument de construire, acționează ca un instrument de gestionare a proiectului și poate genera rapoarte etc., Deși încă nu am folosit această caracteristică.

Maven vs Jenkins și Hudson

Jenkins și Hudson sunt instrumente de integrare continuă, cunoscute în mod obișnuit ca cadre CI. Acestea permit proiectului Java să automatizeze procesul de construire și implementare. Utilizând instrumente CI precum Hudson sau Jenkins, puteți crea automat compilări din oră în oră sau zilnic, puteți, de asemenea, rula automat testele unitare și puteți implementa compilarea în mediul QA sau de producție.
Acest lucru vă ajută dacă lucrați într-un proiect mare și echipa de dezvoltare este răspândită în mai multe locații. Instrumentele CI pot declanșa compilarea ori de câte ori dezvoltatorul comentează codul și verifică dacă proiectul se compilează sau nu.
De altfel, Jenkins și Hudson provin din același arbore sursă. Hudson a fost un proiect original care a fost open source și a fost susținut de Sun.
Când Oracle a cumpărat Sun, a preluat controlul asupra numelui Hudson și a platformei logistice a lui Hudson. Mulți colaboratori open source nu s-au simțit confortabil cu acest lucru, ceea ce a dus la Jenkins, care este destul de mult condus de comunitate.
Dacă trebuie să comparăm Maven și Jenkins sau Hudson, următoarea ar fi lista mea de diferențe între Maven și Hudson sau Jenkins :

1) Principala diferență între Maven și Jenkins sau Hudson este că Maven este un instrument de construcție care știe cum să construiască un proiect, iar Jenkins sau Hudson oferă un declanșator pentru construcție. Puteți controla când să declanșați construirea automată folosind Jenkins sau Hudson sau orice instrument CI.
2) Jenkins poate utiliza Maven ca instrument de construire. De asemenea, Jenkins sau Hudson pot face mult mai mult decât să construiască aplicații, pot rula toate testele unitare, pot implementa livrabilele în serverele configurate etc. În esență, diferența este că Maven este un instrument de construire, în timp ce Jenkins sau Hudson este un instrument de integrare continuă.
Acesta este tot despre diferența dintre Maven și ANT, Jenkins sau Hudson, etc. Maven este destul de mult standardul de construire a proiectelor Java în zilele noastre și îl puteți personaliza pentru a se potrivi în mediul dvs. moștenit bazat pe ANT. Unele organizații au, de asemenea, instrumente CI, cum ar fi Jenkins, care pot fi utilizate împreună cu Maven pentru a automatiza procesul de construire, testare și desfășurare.
Învățare suplimentară
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Nu mai construiți programe Java în mod greoi!