Javarevisited

Samt sett är Maven och ANT byggverktyg, men den största skillnaden är att Maven också tillhandahåller beroendehantering, standardiserad projektlayout och projekthantering. När det gäller skillnaden mellan Maven, ANT och Jenkins så är senare ett verktyg för kontinuerlig integration som är mycket mer än ett byggverktyg. Du kan konfigurera din CI-miljö med hjälp av Jenkins eller Hudson och automatiskt bygga, testa och distribuera ditt Java-projekt. Nu sist, den viktigaste skillnaden mellan Jenkins och Hudson, båda har sitt ursprung i samma källkod men den ena är en sluten källkod medan den andra är en öppen källkod. Du kan läsa detaljerna i den här artikeln.
Nu börjar en lång historia, vad är skillnaden mellan Maven och ANT eller skillnaden mellan Maven och Jenkins, eller Maven vs Hudson är några av de ofta diskuterade frågorna bland Java när utvecklare. Tja alla fyra t.ex. ANT, Maven, Jenkins och Hudson är verktyg för att hjälpa Java-utvecklare på bygg, enhetstestning, kontinuerlig integration (CI) och projekthantering.
I den här Java-artikeln kommer vi att utforska var och en av Maven, ANT, Jenkins och Hudson för att få en grundläggande uppfattning om vad de är, vilken fördel de erbjuder, och hur de används i Java JEE-projekt. Bara för att ge dig en grundläggande uppfattning är ANT ett välkänt byggverktyg, förmodligen det äldsta av alla. Ett byggverktyg används för att skapa leveranser som JAR-fil eller WAR-fil från Java-källa och resurser för distribution.
Maven kom efter ANT och erbjuder mycket mer än ett byggverktyg. Den största skillnaden mellan ANT och Maven är att i ANT måste man definiera allt, dvs. källkatalog, byggkatalog, målkatalog osv. medan Maven följer principen Convention over configuration.
Detta innebär att Maven har en fördefinierad projektstruktur, dvs. en standardkatalog för källfiler, testfiler och resurser. Å andra sidan är Jenkins och Hudson Continues Integration-verktyg som ger dig möjlighet att automatisera din bygg- och distributionsprocess.
Med hjälp av Jenkins eller Hudson kan du utlösa byggning närhelst utvecklaren kommenderar kod, för att se om projektet kompilerar bra, för att köra enhetstester, för att skapa en byggning eller till och med distribuera i QA- eller produktionsmiljön.
På samma sätt kan du ha en dagligen byggd, nattligt byggd eller veckovis byggd process etablerad i Jenkins eller Hudson. I nästa avsnitt kommer vi att förstå Maven, ANT, Jenkins och Hudson mer i detalj och förstå skillnaden mellan dem.
Och om du bara börjar med Maven föreslår jag att du först går igenom en omfattande Maven-kurs som Apache Maven: Beginner to Guru för att lära dig några grunder. Den kommer inte bara att hjälpa dig att bygga och distribuera dina Java- och Spring Boot-projekt med Maven utan också lära dig Maven på djupet.

Maven vs ANT

Alla sedan Maven släpptes har många Javaprogrammerare jämfört Maven och ANT, vilket är ganska naturligt. Till och med jag har tagit lite tid på mig att anamma Maven eftersom jag var mycket van vid ANT-byggprocessen. Så småningom insåg jag att Maven erbjuder mer bekvämlighet som byggverktyg än ANT och att det också ger ett gemensamt sätt att bygga Java-applikationer för flera projekt, utvecklare och organisationer.
Innan jag övergick till Maven hade jag arbetat med mycket komplexa ANT-skript, och varje projekt som jag arbetar med har en annan byggstruktur än andra.
För att kunna göra en utgåva måste du lägga ner mycket tid på att förstå hela byggprocessen, t.ex. varifrån kommer biblioteken, kommer de som JAR eller bygger projektet upp dem under byggtiden, osv. Maven löser många av dessa problem genom att införa standardkonventioner och bättre beroendehantering.
Om vi behöver jämföra Maven och ANT är följande min lista över skillnader mellan Maven och ANT :

1) En stor skillnad mellan Maven och ANT är att Maven kräver mindre konfiguration än ANT, eftersom Maven arbetar enligt principen om konventioner framför konfiguration och utgår från rimliga standardvärden e.t.ex. java-källfil i ${basedir}/src/main/java, resurser i ${basedir}/src/main/resources, JUnit-testfall i ${basedir}/src/test/java etc.
Det skapar också Java-klassfiler i ${basedir}/target/classes och JAR-filer i ${basedir}/target-katalogen. ANT kräver däremot att alla dessa kataloger tillhandahålls som konfiguration, vanligtvis i ANT-byggnadsfilen, t.ex. i build.xml.
2) En annan viktig skillnad mellan Maven och ANT är hanteringen av beroenden. Maven introducerade begreppet repository, som är en central plats för att lagra alla bibliotek, JARs osv. Maven gör det möjligt att använda ett centralt maven-repository såväl som ett lokalt repository och automatiskt hämta beroenden under byggprocessen.
Men ANT-baserade projekt använder i allmänhet ${lib} som en katalog för att lagra beroenden. Det är mycket enklare att ändra och uppdatera beroenden i maven än i ANT eftersom du inte behöver hämta beroenden manuellt. Att ha ett organisationsgemensamt centralt arkiv hjälper också till att ta bort redundans mellan olika projekt.
3) Den tredje och viktigaste skillnaden mellan Maven och ANT är att Maven erbjuder ett konsekvent och gemensamt gränssnitt för att bygga Java-projekt. Allt du behöver göra är att ladda ner projektet och köra mvn install för att bygga det. Genom att känna till Maven-konventionerna och titta på pom.xml kan man också lätt förstå var källfilerna finns och vilka projektberoenden som finns.

4) En annan teknisk skillnad mellan ANT och Maven är att ANT-uppgiften inte har någon livscykel, man måste definiera mål och deras beroenden. Medan Maven har en livscykel, som åberopas när du kör kommandon som mvn install. Maven utför en serie steg som ett resultat av detta kommando för att producera artefakter, t.ex. en JAR-fil, vilket är slutet på livscykeln.
5) Maven upprätthåller också en standardnamnkonvention för artefakter som definieras med hjälp av groupId, artifactId och version. Ytterligare en skillnad mellan ANT och Maven är att Maven är mer än bara ett byggverktyg, det fungerar som ett projekthanteringsverktyg och kan generera rapporter etc. Fast jag har ännu inte använt denna funktion.

Maven vs Jenkins och Hudson

Jenkins och Hudson är verktyg för kontinuerlig integrering, allmänt kända som CI-ramverk. De gör det möjligt för Java-projekt att automatisera bygg- och distributionsprocessen. Genom att använda CI-verktyg som Hudson eller Jenkins kan du skapa tim- eller dagsbyggen automatiskt, du kan också köra dina enhetstester automatiskt och distribuera byggnaden till din QA- eller produktionsmiljö.
Detta hjälper om du arbetar i ett stort projekt och utvecklingsteamet är utspritt på flera platser. CI-verktyg kan utlösa byggning när utvecklaren lägger in kod och kontrollera om projektet kompileras eller inte.
Förresten kommer Jenkins och Hudson från samma källkodsträd. Hudson var ett ursprungligt projekt som hade öppen källkod och stöddes av Sun.
När Oracle köpte Sun tog de kontroll över Hudson-namnet och Hudsons logistiska plattform. Många bidragsgivare till öppen källkod var inte bekväma med detta, vilket resulterar i Jenkins, som är ganska mycket gemenskapsdrivet.
Om vi behöver jämföra Maven och Jenkins eller Hudson skulle följande vara min lista över skillnader mellan Maven och Hudson eller Jenkins :

1) Den huvudsakliga skillnaden mellan Maven och Jenkins eller Hudson är att Maven är ett byggverktyg som vet hur ett projekt ska byggas, medan Jenkins eller Hudson tillhandahåller en utlösare för att bygga. Du kan styra när byggandet ska starta automatiskt med hjälp av Jenkins eller Hudson eller något annat CI-verktyg.
2) Jenkins kan använda Maven som ett byggverktyg. Dessutom kan Jenkins eller Hudson göra mycket mer än att bara bygga program, de kan köra alla enhetstester, distribuera leveranser till konfigurerade servrar osv. I huvudsak är skillnaden att Maven är ett byggverktyg medan Jenkins eller Hudson är ett verktyg för kontinuerlig integration.
Det var allt om skillnaden mellan Maven och ANT, Jenkins eller Hudson osv. Maven är ganska mycket standard för att bygga Java-projekt nuförtiden och du kan anpassa det för att passa in i din ANT-baserade legacy-miljö. Vissa organisationer har också CI-verktyg som Jenkins som kan användas tillsammans med Maven för att automatisera bygg-, test- och distributionsprocessen.
Fortsatt lärande
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Stop Building Java Programs the Hard Way!