Javarevisited
In het kort, hoewel Maven en ANT build tools zijn, is het belangrijkste verschil dat maven ook dependency management, standaard project layout, en project management biedt. Over het verschil tussen Maven, ANT, en Jenkins, later is een continue integratie tool die veel meer is dan een build tool. Je kunt je CI omgeving opzetten met Jenkins of Hudson en automatisch je Java project bouwen, testen, en deployen. Nu als laatste, het belangrijkste verschil tussen Jenkins en Hudson, beide komen voort uit dezelfde broncode maar de een is een closed source terwijl de ander open source is. Je kunt de details lezen in dit artikel.
Nou laten we een lang verhaal beginnen, wat is het verschil tussen Maven en ANT of verschil tussen Maven en Jenkins, of Maven vs Hudson zijn enkele van de veel besproken vragen onder Java wanneer ontwikkelaars. Nou alle vier, zoals ANT, Maven, Jenkins, en Hudson zijn tools om Java ontwikkelaars te helpen op de build, unit testing, continue integratie (CI), en project management.
In dit Java artikel, zullen we elk van Maven, ANT, Jenkins, en Hudson verkennen om een basis idee te krijgen van wat ze zijn, welk voordeel ze bieden, en hoe ze worden gebruikt in Java JEE projecten. Om je een basis idee te geven, ANT is een bekende build tool, waarschijnlijk de oudste van allemaal. Een build tool wordt gebruikt om deliverables zoals JAR files of WAR files te maken van Java source en resources voor deployment.
Maven kwam na ANT en biedt veel meer dan een build tool. Het belangrijkste verschil tussen ANT en Maven is dat je in ANT alles moet definiëren, zoals bron map, bouw map, doel map, etc terwijl Maven het principe van Conventie over configuratie aanneemt.
Dit betekent dat Maven een voorgedefinieerde project structuur heeft, dat wil zeggen standaard map voor bron bestanden, test bestanden, en middelen. Aan de andere kant, Jenkins en Hudson zijn de Continues Integration tools, die je de kracht geven om je build en deployment proces te automatiseren.
Door Jenkins of Hudson te gebruiken kun je een build triggeren wanneer de ontwikkelaar code committeert, om te zien of het project goed compileert, om unit tests uit te voeren, om een build te maken, of zelfs om te deployen in een QA of productie omgeving.
Zo kun je ook een dagelijkse build, een nachtelijke build, of een wekelijkse build proces hebben opgezet in Jenkins of Hudson. In de volgende sectie zullen we Maven, ANT, Jenkins, en Hudson in meer detail begrijpen en het verschil tussen hen.
Twee, als je net begint met Maven, stel ik voor dat je eerst een uitgebreide Maven cursus doorloopt zoals Apache Maven: Beginner to Guru om een aantal grondbeginselen te leren. Het zal je niet alleen helpen om je Java en Spring Boot projecten te bouwen en te implementeren met behulp van Maven, maar ook om Maven zelf grondig te leren kennen.
Maven vs ANT
Al sinds Maven is uitgebracht, vergelijken veel Java programmeurs Maven en ANT, wat vrij normaal is. Zelfs mij heeft het wat tijd gekost om Maven te adopteren omdat ik erg gewend was aan het ANT bouwproces. Uiteindelijk realiseerde ik me dat Maven meer gemak biedt als bouwgereedschap dan ANT en ook een gemeenschappelijke manier afdwingt om Java applicaties te bouwen onder meerdere projecten, ontwikkelaars en organisaties.
Voordat ik overstapte op Maven, had ik gewerkt met zeer complexe ANT scripts, in feite heeft elk project waar ik aan werk een andere bouwstructuur dan anderen.
Om een release te maken, moet je veel tijd besteden aan het begrijpen van het hele bouwproces, bijv. van waar komen de bibliotheken, komen ze als JAR of bouwt het project ze tijdens het bouwen, etc. Maven lost veel van deze problemen op door het introduceren van standaard conventie en beter dependency management.
Als we Maven en ANT moeten vergelijken, volgt hier mijn lijst met verschillen tussen Maven en ANT :
1) Een groot verschil tussen Maven en ANT is dat Maven minder configuratie vereist dan ANT omdat het werkt op het principe van conventie boven configuratie en uitgaat van redelijke standaard bijv.b.v. java source bestand in ${basedir}/src/main/java, resources op ${basedir}/src/main/resources, JUnit test cases op ${basedir}/src/test/java, etc.
Het creëert ook Java class bestanden op ${basedir}/target/classes en JAR bestand op ${basedir}/target directory. Aan de andere kant, ANT vereist al deze directories geleverd als configuratie, meestal in ANT build bestand bijvoorbeeld build.xml.
2) Een ander belangrijk verschil tussen Maven en ANT is dependency Management. Maven introduceerde het concept van de repository, dat is een centrale plaats om alle bibliotheken, JAR’s, enz. op te slaan. Maven maakt het mogelijk om zowel een centrale maven repository als een lokale repository te gebruiken en automatisch dependency te downloaden tijdens het build proces.
While ANT gebaseerde projecten gebruiken over het algemeen ${lib}} als een directory om dependencies op te slaan. Het veranderen en updaten van dependency is veel eenvoudiger in maven dan in ANT, omdat je niet handmatig dependency hoeft te downloaden. Het hebben van een organisatie-brede centrale repository helpt ook om redundantie te verwijderen over verschillende projecten.
3) De derde en belangrijkste verschil tussen Maven en ANT is dat Maven biedt een consistente en gemeenschappelijke interface voor het bouwen van Java-projecten. Het enige wat je hoeft te doen is het project te downloaden en mvn install uit te voeren om het te bouwen. Ook door het kennen van maven conventies en te kijken naar pom.xml, kan men gemakkelijk begrijpen waar bronbestanden zijn en wat project afhankelijkheden zijn.
4) Een ander technisch verschil tussen ANT en Maven is dat ANT taak geen lifecycle heeft, je moet targets en hun afhankelijkheden definiëren. Terwijl Maven een levenscyclus heeft, die wordt aangeroepen wanneer je commando’s uitvoert zoals mvn install. Maven voert een serie stappen uit als resultaat van dit commando om artefacten te produceren, zoals een JAR bestand, wat het einde van de levenscyclus is.
5) Maven handhaaft ook een standaard naamgeving conventie voor artefacten, gedefinieerd met groupId, artifactId, en version. Nog een verschil tussen ANT en Maven is dat Maven meer is dan alleen een build-tool, het fungeert als een projectmanagement-tool en kan rapporten genereren, etc. Hoewel ik deze functie nog niet heb gebruikt.
Maven vs Jenkins en Hudson
Jenkins en Hudson zijn Continuous Integration-tools, algemeen bekend als CI-frameworks. Ze stellen Java-projecten in staat om het bouw- en implementatieproces te automatiseren. Door gebruik te maken van CI tools zoals Hudson of Jenkins kun je per uur of per dag automatisch builds maken, je kunt ook automatisch unit tests uitvoeren en builds deployen naar je QA of productie omgeving.
Dit helpt als je in een groot project werkt en het ontwikkelteam is verspreid over meerdere locaties. CI tools kunnen de build triggeren wanneer de ontwikkelaar code committeert en controleren of het project compileert of niet.
Tussen haakjes, Jenkins en Hudson komen uit dezelfde source tree. Hudson was een oorspronkelijk project dat open source was en ondersteund werd door Sun.
Toen Oracle Sun kocht, nam het de controle over de Hudson naam en het logistieke platform van Hudson over. Veel open source medewerkers voelden zich daar niet prettig bij, wat resulteerde in Jenkins, wat een community-driven project is.
Als we Maven en Jenkins of Hudson met elkaar moeten vergelijken, dan is het volgende mijn lijst van verschillen tussen Maven en Hudson of Jenkins :
1) Het belangrijkste verschil tussen Maven en Jenkins of Hudson is dat Maven een build tool is die weet hoe een project gebouwd moet worden en Jenkins of Hudson een trigger biedt om te bouwen. Je kunt zelf bepalen wanneer je automatisch wilt bouwen met Jenkins of Hudson of een andere CI tool.
2) Jenkins kan Maven gebruiken als een build tool. Jenkins of Hudson kunnen ook veel meer dan alleen applicaties bouwen, ze kunnen alle unit tests uitvoeren, deliverables deployen naar geconfigureerde servers, etc. In essentie is het verschil dat Maven een bouw tool is terwijl Jenkins of Hudson een Continues Integration tool is.
Dat is alles over het verschil tussen Maven en ANT, Jenkins of Hudson, etc. Maven is zo’n beetje de standaard voor het bouwen van Java projecten tegenwoordig en je kunt het aanpassen om in je ANT gebaseerde legacy omgeving te passen. Sommige organisaties hebben ook CI tools zoals Jenkins die gebruikt kunnen worden samen met Maven om geautomatiseerde build, test, en deploy process.
Verder leren
Maven Fundamentals door Bryan Hansen
Maven Crash Course
Java Maven :101 Stop met het bouwen van Java-programma’s op de harde manier!