Javarevisited

Kort sagt, selv om Maven og ANT er build-værktøjer, er den største forskel, at Maven også tilbyder afhængighedsstyring, standardprojektlayout og projektstyring. Om forskellen mellem Maven, ANT og Jenkins, så er sidstnævnte et værktøj til kontinuerlig integration, som er meget mere end et build-værktøj. Du kan opsætte dit CI-miljø ved hjælp af Jenkins eller Hudson og automatisk bygge, teste og distribuere dit Java-projekt. Nu til sidst, den vigtigste forskel mellem Jenkins og Hudson, begge stammer fra den samme kildekode, men den ene er en lukket kildekode, mens den anden er open source. Du kan læse detaljerne i denne artikel.
Nu skal vi starte en lang historie, hvad er forskellen mellem Maven og ANT eller forskellen mellem Maven og Jenkins, eller Maven vs Hudson er nogle af de ofte diskuterede spørgsmål blandt Java når udviklere. Nå alle fire f.eks. ANT, Maven, Jenkins og Hudson er værktøjer til at hjælpe Java-udviklere på opbygning, enhedstest, kontinuerlig integration (CI) og projektstyring.
I denne Java-artikel vil vi udforske hver af Maven, ANT, Jenkins og Hudson for at få en grundlæggende idé om, hvad de er, hvilken fordel de tilbyder, og hvordan de bruges i Java JEE-projekter. Bare for at give dig en grundlæggende idé, ANT er et velkendt build-værktøj, sandsynligvis det ældste blandt alle. Et build-værktøj bruges til at oprette leverancer som JAR-fil eller WAR-fil fra Java-kilde og ressourcer til implementering.
Maven kom efter ANT og tilbyder meget mere end et build-værktøj. Hovedforskellen mellem ANT og Maven er, at man i ANT skal definere alt, dvs. kildemappe, byggemappe, målmappe osv., mens Maven anvender princippet om konvention frem for konfiguration.
Det betyder, at Maven har en foruddefineret projektstruktur, dvs. en standardmappe for kildefiler, testfiler og ressourcer. På den anden side er Jenkins og Hudson Continues Integration-værktøjet, som giver dig mulighed for at automatisere din build- og implementeringsproces.
Gennem Jenkins eller Hudson kan du udløse build, når udvikleren committerer kode, for at se, om projektet kompilerer fint, for at køre enhedstest, for at oprette et build eller endda implementere i QA- eller produktionsmiljøet.
Sådan kan du have en daglig build, natlig build eller ugentlig buildproces etableret i Jenkins eller Hudson. I det næste afsnit vil vi forstå Maven, ANT, Jenkins og Hudson mere detaljeret og forstå forskellen mellem dem.
Btw, hvis du lige er begyndt med Maven, foreslår jeg, at du først gennemgår et omfattende Maven-kursus som Apache Maven: Beginner to Guru for at lære nogle grundlæggende ting. Det vil ikke kun hjælpe dig med at bygge og implementere dine Java- og Spring Boot-projekter ved hjælp af Maven, men også lære Maven selv i dybden.

Maven vs ANT

Siden Maven er blevet udgivet, sammenligner mange Java-programmører Maven og ANT, hvilket er ret naturligt. Selv jeg har taget noget tid om at tage Maven til mig, fordi jeg var meget vant til ANT-byggeprocessen. Til sidst indså jeg, at Maven tilbyder mere bekvemmelighed som et build-værktøj end ANT, og at Maven også styrker en fælles måde at bygge Java-applikationer på blandt flere projekter, udviklere og organisationer.
Hvor jeg skiftede til Maven, havde jeg arbejdet med meget komplekse ANT-scripts, faktisk har hvert projekt, jeg arbejder på, en anden build-struktur end andre.
For at lave en udgivelse skal du bruge meget tid på at forstå hele build-processen, f.eks. hvorfra bibliotekerne kommer, kommer de som JAR, eller bygger projektet dem i løbet af build-tiden, osv. Maven løser mange af disse problemer ved at indføre standardkonvention og bedre afhængighedsstyring.
Hvis vi skal sammenligne Maven og ANT, er følgende min liste over forskelle mellem Maven og ANT :

1) En væsentlig forskel mellem Maven og ANT er, at Maven kræver mindre konfiguration end ANT, fordi den arbejder ud fra princippet om konvention frem for konfiguration og forudsætter rimelige standard e.f.eks. java-kildefil i ${basedir}/src/main/java, ressourcer på ${basedir}/src/main/resources, JUnit-testcases på ${basedir}/src/test/java osv.
Den opretter også Java-klassefiler på ${basedir}/target/classes og JAR-fil på ${basedir}/target-mappen. På den anden side kræver ANT, at alle disse mapper leveres som konfiguration, normalt i ANT-bygningsfilen, f.eks. build.xml.
2) En anden væsentlig forskel mellem Maven og ANT er afhængighedsstyring. Maven introducerede begrebet repository, som er et centralt sted at opbevare alle biblioteker, JAR’er osv. Maven giver mulighed for at bruge et centralt Maven-repository såvel som et lokalt repository og automatisk hente afhængighed under byggeprocessen.
Mens ANT-baserede projekter generelt bruger ${lib} som en mappe til at gemme afhængigheder. Ændring og opdatering af afhængighed er meget nemmere i maven end ANT, fordi du ikke behøver at hente afhængighed manuelt. At have et centralt repository på tværs af organisationen er også med til at fjerne redundans på tværs af forskellige projekter.
3) Den tredje og vigtigste forskel mellem Maven og ANT er, at Maven tilbyder en konsistent og fælles grænseflade til at bygge Java-projekter. Det eneste, du skal gøre, er at downloade projektet og køre mvn install for at bygge det. Også ved at kende maven-konventionerne og se på pom.xml kan man let forstå, hvor kildefilerne er, og hvad der er projektets afhængigheder.

4) En anden teknisk forskel mellem ANT og Maven er, at ANT-opgaven ikke har nogen livscyklus, man skal definere mål og deres afhængigheder. Mens Maven har en livscyklus, som bliver påkaldt, når du kører kommandoer som mvn install. Maven udfører en række trin som følge af denne kommando for at producere artefakter, f.eks. en JAR-fil, som er slutningen af livscyklussen.
5) Maven håndhæver også en standardnavngivningskonvention for artefakter, der er defineret ved hjælp af groupId, artifactId og version. En anden forskel mellem ANT og Maven er også, at Maven er mere end blot et build-værktøj, det fungerer som et projektstyringsværktøj og kan generere rapporter osv., Selv om jeg endnu ikke har brugt denne funktion.

Maven vs. Jenkins og Hudson

Jenkins og Hudson er Continuous Integration-værktøj, almindeligvis kendt som CI-rammer. De giver Java-projektet mulighed for at automatisere bygge- og implementeringsprocessen. Ved at bruge CI-værktøjer som Hudson eller Jenkins kan du oprette timelige eller daglige builds automatisk, du kan også automatisk køre dine enhedstests og kan distribuere build til dit QA- eller produktionsmiljø.
Dette hjælper, hvis du arbejder i et stort projekt, og udviklingsteamet er spredt over flere steder. CI-værktøjer kan udløse build, når udvikleren indsender kode og kontrollere, om projektet kompileres eller ej.
I øvrigt er Jenkins og Hudson fra det samme kildetræ. Hudson var et oprindeligt projekt, som var open source og blev understøttet af Sun.
Da Oracle købte Sun, overtog de kontrollen over Hudson-navnet og logistikplatformen for Hudson. Mange open source-bidragydere var ikke trygge ved det, hvilket resulterer i Jenkins, som er temmelig meget fællesskabsdrevet.
Hvis vi skal sammenligne Maven og Jenkins eller Hudson, vil følgende være min liste over forskelle mellem Maven og Hudson eller Jenkins :

1) Den vigtigste forskel mellem Maven og Jenkins eller Hudson er, at Maven er et byggeværktøj, der ved, hvordan et projekt skal bygges, og Jenkins eller Hudson giver en trigger til at bygge. Du kan styre, hvornår der skal udløses automatisk build ved hjælp af Jenkins eller Hudson eller et hvilket som helst CI-værktøj.
2) Jenkins kan bruge Maven som et build-værktøj. Desuden kan Jenkins eller Hudson gøre meget mere end blot at bygge applikationer, de kan køre alle enhedstests, distribuere leverancer til konfigurerede servere osv. I bund og grund er forskellen, at Maven er et build-værktøj, mens Jenkins eller Hudson er et Continues Integration-værktøj.
Det er alt om forskellen mellem Maven og ANT, Jenkins eller Hudson osv. Maven er stort set standard for opbygning af Java-projekter i dag, og du kan tilpasse det til at passe ind i dit ANT-baserede legacy-miljø. Nogle organisationer har også CI-værktøjer som Jenkins, der kan bruges sammen med Maven til at automatisere bygge-, test- og implementeringsprocessen.
Videre læring
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Stop Building Java Programs the Hard Way!