Odabir pravog alata za izgradnju: Ant protiv Maven vs Gradle
Tijekom razvoja softvera, programeri moraju iznova i iznova graditi isti kod. Često pokušavaju koristiti bash skripte ili druge skriptne jezike za automatizaciju zadatka. Međutim, postoje dostupni alati za izgradnju koji su prikladniji za automatizaciju izrade. Prevladavajući alati za izradu su:
- Apački mrav s bršljanom
- Maven
- Gradle
Istražimo alate kako bismo saznali više.
Apački mrav s bršljanom
Apache Ant je alat naredbenog retka zasnovan na Javi koji koristi XML datoteke za definiranje skripti gradnje. Uglavnom se koristi za Java gradnje, ali može se koristiti i za razvoj C / C ++. Ugrađeni zadaci pružaju načine za kompajliranje, sastavljanje, testiranje i pokretanje softverskih aplikacija. Korisnici također mogu stvoriti vlastite "antlibs" kako bi poboljšali funkcionalnost Ant. Apache Ivy alat je za upravljanje ovisnostima koji se lako integrira s Antom kako bi pružio robusniji ekosustav. Razvoj Ant započeo je 2000. godine.
Pros
- Bolja kontrola nad cjelokupnim postupkom izrade
- Dovoljno fleksibilan za rad s bilo kojim radnim procesom
Protiv
- Datoteke za izradu temeljene na XML-u mogu postati velike i neodržive
- Mnogo je vremena i resursa potrebno za održavanje skripti izrade
- IDE integraciju je teško postići
Primjer mrava s bršljanom
Ovdje možete instalirati najnoviji Ant. Morate preuzeti zip, proširiti i staviti mapu bin na put. Pomoću sljedeće naredbe možete provjeriti je li Ant pravilno instaliran:
$ mrava -verzijaApache Ant (TM) verzija 1.10.1 sastavljen 2. veljače 2017
Nakon što instalirate Ant, možete preuzeti najnoviju staklenku Ivy i staviti je u mapu lib unutar direktorija Ant.
Nakon što instalirate Ant, stvorite mape helloworld i helloworld / src. Unutar mape src stavite helloworld.java datoteka s kodom:
/ **************************Ispisuje "Hello World!"
*************************** /
javni razred helloworld
javna statička void glavna (String [] args)
Sustav.van.println ("Pozdrav svijetu!");
Sada u mapi helloworld stvorite gradnju.xml datoteku sa sljedećim kodom:
I u istoj mapi helloworld stvorite bršljan.xml datoteku sa sljedećim kodom:
Struktura direktorija trebala bi izgledati ovako:
Pozdrav svijete| - graditi.xml
| - bršljan.xml
'- src
'-- Pozdrav svijete.Java
Sada možete pokrenuti izgradnju naredbom:
staklenka od mravaUspješna gradnja trebala bi pružiti ovakve rezultate:
staklenka od mravaDatoteka gradnje: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
odlučnost:
[bršljan: dohvat] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / bršljan / ::
[ivy: dohvatiti] :: postavke učitavanja :: url = jar: datoteka: / Users / zak / BuildTools / ANT / apache
-mrav-1.10.1 / lib / bršljan-2.4.0.staklenka!/ org / apache / ivy / core / settings / ivysettings.xml
[bršljan: dohvat] :: rješavanje ovisnosti :: org.apache # helloworld; [e-pošta zaštićena]
MacBook-Air.lokalno
[bršljan: dohvat] confs: [zadano]
[bršljan: dohvat] pronađen junit # junit; 4.12 u javnosti
[bršljan: dohvat] pronađena org.hamcrest # hamcrest-core; 1.3 u javnosti
[bršljan: dohvatiti] :: izvještaj o razlučivanju :: riješiti 397ms :: artefakti dl 15ms
---------------------------------------------------------------------
| | moduli || artefakti |
| conf | broj | pretraga | dwnlded | deložiran || broj | dwnlded |
---------------------------------------------------------------------
| zadano | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[bršljan: dohvat] :: dohvaćanje :: org.apache # helloworld
[bršljan: dohvat] confs: [zadano]
[ivy: retrieve] 0 kopiranih artefakata, 4 već preuzeta (0kB / 39ms)
sastaviti:
[mkdir] Izrađen direktorij: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
razreda
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: upozorenje:
'includeantruntime' nije postavljeno, a zadano je za izgradnju.sysclasspath = zadnji; postavljeno na false
za ponovljive gradnje
[javac] Priprema 1 izvorne datoteke u / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / klase
tegla:
[mkdir] Izrađen direktorij: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Izrada jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Pozdrav svijete.staklenka
IZGRADITI USPJEŠNO
Ukupno vrijeme: 6 sekundi
Datoteku jar možete isprobati ovako:
$ java -cp build / bin / helloworld.tegla helloworldPozdrav svijete!
Definirali smo jar datoteku koja će se staviti u mapu build / bin. Mape se stvaraju tijekom gradnje. Naredba mrav jar poziva izgradnju cilja jar u izradi.xml.
Maven
Maven je razvijen za rješavanje problema s kojima se suočavaju skripte na bazi Ant. Čuvao je XML datoteke, ali je zauzeo drugačiji pristup organizaciji. U Antu programeri moraju stvoriti sve zadatke. Maven smanjuje stvaranje zadataka primjenom jačih standarda za organiziranje koda. Kao rezultat toga, lakše je započeti sa standardnim projektima.
Također je uveo preuzimanja ovisnosti koja su olakšala razvoj. Prije uvođenja Ivya u Ant, korisnici su morali lokalno upravljati ovisnostima. Maven je prvo usvojio filozofiju upravljanja ovisnostima.
Međutim, Mavensovi strogi standardi otežavaju pisanje prilagođenih skripti za izgradnju. Alat je jednostavan za rad ukoliko projekt slijedi stroge standarde.
Pros
- Automatsko preuzimanje ovisnosti
- Sve se ovisnosti automatski bilježe u kontroli izvora kao dio Mavenovih skripti
- Standardizira i pojednostavljuje postupak izrade
- Jednostavno se integrira s IDE-ima i CI / CD sustavima
Protiv
- Nije fleksibilan u stvaranju prilagođenih tijekova rada
- Strma krivulja učenja i postupak je teško za početnike razumjeti
- Rješavanje problema gradnje i nove integracije knjižnica oduzima puno vremena
- Nije dobro s više verzija iste ovisnosti
Primjer Mavena
Najnoviji Maven možete preuzeti ovdje. Instalaciju možete provjeriti ovako:
$ mvn --verzijaApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Početna stranica Mavena: / Users / zak / BuildTools / Maven / apache-maven-3.5.2
Inačica Java: 1.8.0_74, dobavljač: Oracle Corporation
Java početna stranica: / Library / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Sadržaj / Početna / jre
Zadana lokalizacija: en_US, kodiranje platforme: UTF-8
Naziv OS-a: "mac os x", inačica: "10.11.6 ", luk:" x86_64 ", obitelj:" mac "
Stvorite mapu helloworld i generirajte projekt pomoću sljedeće naredbe:
$ mvn arhetip: generiraj -DgroupId = com.naziv tvrtke.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false
Trebao bi stvoriti strukturu mape i generirati izlaz koji izgleda ovako:
[INFO] Traženje projekata ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Izgradnja stuba Maven (bez POM-a) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> dodatak za maven-archetype: 3.0.0: generiraj (default-cli)> generiraj-izvore
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ samostalno-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generiraj (default-cli) @ standalone-pom ---
[INFO] Generiranje projekta u batch načinu
[INFO] ----------------------------------------------------------------------------
[INFO] Korištenje sljedećih parametara za stvaranje projekta iz Starog (1.x) Arhetip:
maven-arhetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parametar: basedir, Vrijednost: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parametar: paket, Vrijednost: com.naziv tvrtke.Pozdrav svijete
[INFO] Parametar: groupId, Vrijednost: com.naziv tvrtke.Pozdrav svijete
[INFO] Parametar: artifactId, Vrijednost: helloworld
[INFO] Parametar: packageName, Vrijednost: com.naziv tvrtke.Pozdrav svijete
[INFO] Parametar: verzija, vrijednost: 1.0-SNAPSHOT
[INFO] projekt izrađen iz Old (1.x) Arhetip u direktoriju: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] IZGRADITI USPJEH
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme: 8.602 s
[INFO] Završeno u: 2018-01-27T00: 05: 37-08: 00
[INFO] Konačna memorija: 15M / 152M
[INFO] ------------------------------------------------------------------------
Struktura mape trebala bi izgledati ovako:
Pozdrav svijete| - pom.xml
'- src
| - glavni
| '- java
| '- com
| '- naziv tvrtke
| '-- Pozdrav svijete
| '- App.Java
'- test
'- java
'- com
'- naziv tvrtke
'-- Pozdrav svijete
'- AppTest.Java
Pom.xml sadrži konfiguracije gradnje. Unutar pom.xml kod izgleda ovako:
_0.xsd ">
Datoteku jar možete generirati pomoću sljedeće naredbe:
$ mvn paket[INFO] Traženje projekata ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Zgrada helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- dodatak za maven-resources: 2.6: resursi (zadani resursi) @ helloworld ---
[UPOZORENJE] Korištenje kodiranja platforme (zapravo UTF-8) za kopiranje filtriranih resursa, tj.e.
build ovisi o platformi!
[INFO] preskoči nepostojeći resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- dodatak za maven-compiler: 3.1: kompajliranje (zadana kompilacija) @ helloworld ---
[INFO] Otkrivene promjene - ponovno sastavljanje modula!
[UPOZORENJE] Kodiranje datoteka nije postavljeno, pomoću kodiranja platforme UTF-8, tj.e. graditi je
ovisno o platformi!
[INFO] Sastavljanje 1 izvorne datoteke u / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / klase
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (zadani-testResources) @
Pozdrav svijete ---
[UPOZORENJE] Korištenje kodiranja platforme (zapravo UTF-8) za kopiranje filtriranih resursa, tj.e.
build ovisi o platformi!
[INFO] preskoči nepostojeći resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[INFO]
[INFO] --- dodatak za maven-compiler: 3.1: testCompile (zadana-testCompile) @ helloworld ---
[INFO] Otkrivene promjene - ponovno sastavljanje modula!
[UPOZORENJE] Kodiranje datoteka nije postavljeno, pomoću kodiranja platforme UTF-8, tj.e. graditi je
ovisno o platformi!
[INFO] Sastavljanje 1 izvorne datoteke u / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (zadani test) @ helloworld ---
[INFO] Direktorij izvještaja Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
izvještaji o sigurnoj vatri
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Trčanje com.naziv tvrtke.Pozdrav svijete.AppTest
Izvršeni testovi: 1, neuspjesi: 0, pogreške: 0, preskočeni: 0, proteklo vrijeme: 0.014 sek
Rezultati:
Izvršeni testovi: 1, neuspjesi: 0, pogreške: 0, preskočeni: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (zadana-jar) @ helloworld ---
[INFO] Izrada jar: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.staklenka
[INFO] ------------------------------------------------------------------------
[INFO] IZGRADITI USPJEH
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme: 5.624 s
[INFO] Završeno u: 2018-01-27T00: 11: 10-08: 00
[INFO] Konačna memorija: 16M / 114M
[INFO] ------------------------------------------------------------------------
Datoteku jar možete pokrenuti ovako:
$ java -cp cilj / helloworld-1.0-SNAPSHOT.tegla kom.naziv tvrtke.Pozdrav svijete.AppPozdrav svijete!
Datoteka jar stavlja se u ciljnu mapu.
Gradle
Gradle kombinira snagu Ant i Maven. Prva verzija Gradlea objavljena je 2012. godine. Brzo je usvojeno. Google ga trenutno koristi za Android OS.
Umjesto XML-a, Gradle koristi jezik Groovy. Kao rezultat toga, skripte za izgradnju u Gradleu lakše je pisati i čitati. U početku je koristio Ivy za upravljanje ovisnostima, ali sada koristi vlastiti mehanizam ovisnosti.
Pros
- Pruža standardizaciju, a pritom ostaje fleksibilan
- Jednostavne za čitanje i pisanje skripti za izgradnju
- Bolje u rukovanju s više verzija ovisnosti
- Sposoban za rad s više programskih jezika i tehnologija
- Aktivna zajednica koja pomaže u razvoju alata
- Gradle DSL (jezik specifičan za domenu) čini jednostavnu strukturu konfiguracije
- Gradle nudi poboljšanja performansi koristeći postupno, predmemoriju gradnje i Gradle Daemon
Protiv
- IDE integracija nije tako dobra kao Maven
Primjer Gradle
Gradle možete instalirati odavde. Jednom kada postavite Gradle na svoj put, možete ga provjeriti:
$ gradle --verzija------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Vrijeme izrade: 2018-01-24 17:04:52 UTC
Revizija: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Mrav: Apache Ant (TM) verzija 1.9.9 sastavljeno 2. veljače 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Zatim stvorite sljedeću strukturu direktorija:
Pozdrav svijete| - graditi.gradle
'- src
| - glavni
'- java
'-- Pozdrav svijete
'-- Pozdrav svijete.Java
Za svijet svijeta.java je stavila kod iz primjera Ant. I za izgradnju.gradle stavite sljedeći kod:
primijeni dodatak: 'java'inačica = '1.0 '
spremišta
mavenCentral ()
ovisnosti
testCompile grupa: 'junit', naziv: 'junit', inačica: '4.12 '
Pomoću naredbe "gradle zadaci-sve" možete pogledati sve dostupne naredbe. Gradle automatski preuzima dodatke koje navedete u izradi.gradle datoteku i prikazuje vam dodatne zadatke dostupne zbog dodataka.
Izgradnju možete dobiti pokretanjem:
$ gradle teglaIZGRADITI USPJEŠNO za 1s
2 djelotvorna zadatka: 2 izvršena
Možete pokrenuti svoju teglu ovako:
$ java -cp build / libs / helloworld-1.0.tegla helloworldPozdrav svijete!
Datoteka jar stavlja se u mapu build / libs.
Zaključak
Među alatima za izgradnju, Ant može biti koristan za manje projekte, dok je Maven bolji za osiguravanje da svi programeri slijede ista pravila. Gradle je najnoviji alat koji pruža najveću fleksibilnost.
Reference:
- http: // mrav.apache.org /
- http: // mrav.apache.organizacija / bršljan /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-primjer
- https: // primjeri.javacodegeeks.com / core-java / gradle / gradle-hello-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / vodiči / početak rada / maven-u-pet minuta.html
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // technologyconversations.com / 2014/06/18 / build-tools /
- https: // www.kvora.com / Što su-za-i-protiv-Mavena-naspram-Ant-a-kao-građevinski-alati-za-Javu