Mrav vs Maven vs Gradle

Ovaj je članak dio serije: • Uvod u Gradle

• Ant protiv Maven vs Gradle (trenutni članak) • Pisanje prilagođenih Gradle dodataka

• Stvaranje masne tegle u Gradlama

1. Uvod

U ovom ćemo članku istražiti tri alata za automatizaciju gradnje Java koji su dominirali u ekosustavu JVM - Ant, Maven i Gradle.

Predstavit ćemo svakog od njih i istražiti kako su se razvijali alati za automatizaciju gradnje Java.

2. Apači mrav

U početku je Make bio jedini alat za automatizaciju izrade dostupna izvan domaćih rješenja. Make postoji od 1976. godine i kao takav korišten je za izgradnju Java aplikacija u ranim Java godinama.

Međutim, puno konvencija iz programa C nije se uklopilo u ekosustav Java, pa je s vremenom Ant preuzeo bolju alternativu.

Apache Ant ("Još jedan uredan alat") Java je knjižnica koja se koristi za automatizaciju procesa gradnje za Java programe. Uz to, Ant se može koristiti za izgradnju ne-Java aplikacija. U početku je bio dio baze podataka Apache Tomcat, a objavljen je kao samostalni projekt 2000. godine.

U mnogim je aspektima Ant vrlo sličan Makeu i dovoljno je jednostavan da ga svatko može početi koristiti bez posebnih preduvjeta. Datoteke za izradu mrava napisane su u XML-u i prema dogovoru se nazivaju build.xml.

Različite faze procesa gradnje nazivaju se "ciljevi".

Evo primjera a build.xml datoteka za jednostavan Java projekt s Pozdrav svijete glavna klasa:

Ova datoteka gradnje definira četiri cilja: čist, sastaviti, staklenka i trčanje. Na primjer, kod možemo kompilirati pokretanjem:

sastaviti mrav

Ovo će pokrenuti metu čist prvo što će izbrisati direktorij "klase". Nakon toga, meta sastaviti ponovno će stvoriti direktorij i u njega prevesti mapu src.

Glavna prednost Ant-a je njegova fleksibilnost. Ant ne nameće nikakve konvencije kodiranja ili strukture projekata. Slijedom toga, to znači da Ant zahtijeva od programera da sami napišu sve naredbe, što ponekad dovodi do ogromnih XML datoteka gradnje koje je teško održavati.

Budući da ne postoje konvencije, samo poznavanje Ant-a ne znači da ćemo brzo razumjeti bilo koju datoteku gradnje Ant-a. Vjerojatno će trebati neko vrijeme da se naviknete na nepoznatu datoteku Ant, što je nedostatak u usporedbi s drugim, novijim alatima.

Isprva Ant nije imao ugrađenu podršku za upravljanje ovisnostima. Međutim, kako je upravljanje ovisnostima postalo neophodno u kasnijim godinama, Apache Ivy je razvijen kao potprojekt projekta Apache Ant. Integriran je s Apache Ant i slijedi iste principe dizajna.

Međutim, početna ograničenja Ant zbog nepostojanja ugrađene podrške za upravljanje ovisnostima i frustracija pri radu s neupravljivim XML datotekama gradnje dovela su do stvaranja Mavena.

3. Apache Maven

Apache Maven je alat za upravljanje ovisnostima i alat za automatizaciju izrade, koji se prvenstveno koristi za Java programe. Maven i dalje koristi XML datoteke baš kao i Ant, ali na mnogo upravljiviji način. Naziv igre ovdje je dogovor oko konfiguracije.

Iako Ant pruža fleksibilnost i zahtijeva da se sve napiše ispočetka, Maven se oslanja na konvencije i daje unaprijed definirane naredbe (ciljeve).

Jednostavno rečeno, Maven nam omogućuje da se usredotočimo na ono što bi naša gradnja trebala učiniti i daje nam okvir za to. Još jedan pozitivan aspekt Mavena bio je taj što je pružao ugrađenu podršku za upravljanje ovisnostima.

Mavenova konfiguracijska datoteka, koja sadrži upute za izgradnju i upravljanje ovisnostima, naziva se konvencionalno pom.xml. Uz to, Maven također propisuje strogu strukturu projekta, dok Ant i tu pruža fleksibilnost.

Evo primjera a pom.xml datoteku za isti jednostavni Java projekt s Pozdrav svijete glavna klasa od prije:

 4.0.0 baeldung mavenPrimjer 0.0.1-SNAPSHOT Primjer Maven junit junit 4.12 test 

Međutim, sada je i struktura projekta standardizirana i u skladu je s Mavenovim konvencijama:

+ --- src | + --- glavni | | + --- java | | | \ --- com | | | \ --- baeldung | | | \ --- maven | | | HelloWorld.java | | | | | \ --- resursi | \ --- test | + --- java | \---resursi

Za razliku od Ant-a, nije potrebno ručno definirati svaku od faza u procesu gradnje. Umjesto toga, možemo jednostavno nazvati Mavenove ugrađene naredbe.

Na primjer, kod možemo kompilirati pokretanjem:

mvn sastaviti

U svojoj srži, kako je zabilježeno na službenim stranicama, Maven se može smatrati okvirom za izvršavanje dodataka, jer sav posao obavljaju dodaci. Maven podržava širok raspon dostupnih dodataka, a svaki od njih može se dodatno konfigurirati.

Jedan od dostupnih dodataka je dodatak za ovisnost Apache Maven koji ima ovisnosti o kopiji cilj koji će kopirati naše ovisnosti u navedeni direktorij.

Da bismo prikazali ovaj dodatak na djelu, uključimo ovaj dodatak u naš pom.xml datoteku i konfigurirajte izlazni direktorij za naše ovisnosti:

   org.apache.maven.plugins maven-zavisnost-dodatak kopiranje-ovisnosti paket kopiranje-ovisnosti cilj / ovisnosti 

Ovaj će se dodatak izvršiti u a paket fazu, pa ako pokrenemo:

mvn paket

Izvršit ćemo ovaj dodatak i kopirati ovisnosti u ciljnu / ovisnu mapu.

Postoji i postojeći članak o tome kako stvoriti izvršni JAR koristeći različite Maven dodatke. Uz to, za detaljan pregled Mavena pogledajte ovaj osnovni vodič na Mavenu, gdje se istražuju neke ključne značajke Mavena.

Maven je postao vrlo popularan otkako su datoteke izrade sada standardizirane i trebalo je znatno manje vremena za održavanje datoteka gradnje, u usporedbi s Antom. Međutim, iako standardizirane od datoteka Ant, konfiguracijske datoteke Mavena i dalje postaju velike i glomazne.

Mavenove stroge konvencije dolaze s cijenom da budu puno manje fleksibilne od Ant. Prilagođavanje ciljeva vrlo je teško, pa je pisanje prilagođenih skripti za izgradnju puno teže u usporedbi s Antom.

Iako je Maven napravio neka ozbiljna poboljšanja u pogledu olakšavanja i standardiziranja procesa izrade aplikacija, ipak ima svoju cijenu jer je puno manje fleksibilan od Ant-a. To je dovelo do stvaranja Gradlea koji kombinira najbolje iz oba svijeta - Mravinu fleksibilnost i Mavenove značajke.

4. Gradle

Gradle je upravljanje ovisnostima i alat za automatizaciju gradnje koji je izgrađena na konceptima Ant i Maven.

Jedna od prvih stvari koje možemo primijetiti kod Gradlea je da ne koristi XML datoteke, za razliku od Ant ili Maven.

Vremenom su programeri postajali sve više i više zainteresirani za postojanje i rad s jezikom specifičnim za domenu - što će im, jednostavno rečeno, omogućiti rješavanje problema u određenoj domeni pomoću jezika prilagođenog toj određenoj domeni.

To je usvojio Gradle koji koristi DSL baziran na Groovyju ili Kotlinu. To je dovelo do manjih konfiguracijskih datoteka s manje nereda jer je jezik posebno dizajniran za rješavanje određenih problema s domenom. Gradleova konfiguracijska datoteka naziva se prema dogovoru graditi.gradle u Groovyju, ili build.gradle.kts u Kotlinu.

Primijetite da Kotlin nudi bolju IDE podršku od Groovyja za automatsko dovršavanje i otkrivanje pogrešaka.

Evo primjera a graditi.gradle datoteku za isti jednostavni Java projekt s Pozdrav svijete glavna klasa od prije:

primijeniti dodatak: 'java' spremišta {mavenCentral ()} jar {baseName = 'gradleExample' version = '0.0.1-SNAPSHOT'} ovisnosti {testImplementation 'junit: junit: 4.12'}

Kod možemo kompilirati pokretanjem:

razredi gradle

U svojoj osnovi Gradle namjerno pruža vrlo malo funkcionalnosti. Dodaci dodaju sve korisne značajke. U našem primjeru smo koristili Java dodatak koji nam omogućuje kompajliranje Java koda i drugih vrijednih značajki.

Gradle je svojim koracima gradnje dao naziv "zadaci", za razliku od Antovih "ciljeva" ili Mavenovih "faza". S Mavenom smo koristili dodatak za ovisnost Apache Maven, a specifični je cilj kopirati ovisnosti u određeni direktorij. S Gradleom možemo učiniti isto koristeći zadatke:

zadatak copyDependencies (vrsta: Copy) {from configurations.compile u 'dependencies'}

Ovaj zadatak možemo pokrenuti izvršavanjem:

gradle copyDependitions

5. Zaključak

U ovom smo članku predstavili Ant, Maven i Gradle - tri alata za automatizaciju gradnje Java.

Nije iznenađujuće što Maven danas drži većinu tržišta građevinskih alata.

Međutim, Gradle je vidio dobro usvajanje u složenijim bazama kodova iz sljedećih razloga:

  • Mnogo projekata otvorenog koda kao što je Spring koristi ga sada
  • Za većinu je scenarija brži od Mavena, zahvaljujući postupnim gradnjama
  • Nudi usluge napredne analize i uklanjanja pogrešaka

Međutim, čini se da Gradle ima strmiju krivulju učenja, pogotovo ako niste upoznati s Groovyem ili Kotlinom.

Sljedeći » Pisanje prilagođenih Gradle dodataka « Prethodni uvod u Gradle