Mrav vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Tijekom razvoja softvera, programeri moraju uvijek iznova obnavljati isti kod. Često pokušavaju koristiti bash skripte ili druge skriptne jezike za automatizaciju zadatka. Međutim, dostupni su alati za izgradnju koji su prikladniji za automatizaciju gradnje. Prevladavajući alati za gradnju su:

Istražimo alate kako bismo saznali više.







Apački mrav s Ivy

Apache Ant je alat za naredbeni redak temeljen na Javi koji koristi XML datoteke za definiranje skripti za izgradnju. Uglavnom se koristi za Java gradnje, ali se može koristiti i za razvoj C/C ++. Ugrađeni zadaci pružaju načine za sastavljanje, sastavljanje, testiranje i pokretanje softverskih aplikacija. Korisnici također mogu stvoriti vlastite antlibove kako bi poboljšali funkcionalnost Ant. Apache Ivy je alat za upravljanje ovisnostima koji se lako integrira s Antom kako bi pružio robusniji ekosustav. Razvoj Ant započeo je 2000.



Pros



  • Bolja kontrola nad cjelokupnim procesom izgradnje
  • Dovoljno fleksibilan za rad sa bilo kojim radnim procesom

Protiv





  • Datoteke za izgradnju temeljene na XML -u mogu postati velike i neodržive
  • Za održavanje skripti za izgradnju potrebno je mnogo vremena i resursa
  • Integraciju IDE -a teško je postići

Primjer mrava s bršljanom

Najnoviji Ant možete instalirati iz ovdje . Morate preuzeti zip, proširiti i staviti mapu bin na svoj put. Pomoću sljedeće naredbe možete provjeriti je li Ant pravilno instaliran:

$ ant-verzija
Apaški mrav(TM)verzija 1.10.1 sastavljena u veljači2 2017. godine

Nakon što instalirate Ant, možete preuzeti najnoviji Ivy jar i staviti ga u mapu lib unutar Ant direktorija.



Nakon što instalirate Ant, stvorite mape helloworld i helloworld/src. Unutar mape src stavite datoteku helloworld.java s kodom:

/ **************************

Ispisuje 'Hello World!'

*************************** /

javnost razredPozdrav svijete{

javnost statički poništitiglavni( Niz []args) {
Sustav .van.println('Pozdrav svijete!');
}

}

Sada u mapi helloworld stvorite datoteku build.xml sa sljedećim kodom:

xmlns: bršljan='antlib: org.apache.ivy.ant' Ime='Pozdrav svijete' zadano='staklenka'>

Ime='src.dir' vrijednost='src'/>
Ime='build.dir' vrijednost='izgraditi'/>
Ime='classes.dir' vrijednost='$ {build.dir}/classes'/>
Ime='am.dir' vrijednost='$ {build.dir} / bin'/>
Ime='lib.dir' vrijednost='lib' />
iskaznica='lib.path.id'>
tebi='$ {lib.dir}' />
>

Ime='odlučnost'>
/>
>

Ime='čist'>
tebi='$ {build.dir}'/>
>

Ime='sastaviti' ovisi='odlučnost'>
tebi='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' classpathref='lib.path.id'/>
>

Ime='staklenka' ovisi='sastaviti'>
tebi='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

U istoj mapi helloworld stvorite datoteku ivy.xml sa sljedećim kodom:

verzija='2.0'>
organizacija='org.apache' modul='Pozdrav svijete'/>
>
org='junit' Ime='junit' rev='4.12'/>
>
>

Struktura direktorija trebala bi izgledati ovako:

Pozdrav svijete
|- build.xml
| - bršljan.xml
`- src
`- helloworld.java

Sada možete pokrenuti gradnju naredbom:

$mravstaklenka

Uspješna izgradnja trebala bi osigurati ovakav ispis:

staklenka za mravlje
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

odlučnost:
[bršljan: dohvati] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: postavke učitavanja :: url = jar: datoteka:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[bršljan: dohvatiti] :: rješavanje ovisnosti :: org.apache#helloworld; [zaštićena e -pošta]
MacBook-Air.lokalno
[bršljan: dohvati] confs: [zadano]
[bršljan: dohvat] pronađen junit#junit; 4.12 u javnosti
[bršljan: dohvat] pronađen org.hamcrest#hamcrest-core; 1.3 u javnosti
[bršljan: dohvatiti] :: izvješće o razrješenju :: razriješiti 397ms :: artefakti dl 15ms
-------------------------------------------------- -------------------
| | moduli || artefakti |
| conf | broj | pretraga | dwnlded | iseljen || broj | dwnlded |
-------------------------------------------------- -------------------
| zadano | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[bršljan: dohvaćanje] :: dohvaćanje :: org.apache#helloworld
[bršljan: dohvati] confs: [zadano]
[bršljan: dohvat] 0 artefakata kopirano, 4 već preuzeto (0 kB/39 ms)

sastaviti:
[mkdir] Izrađen direktorij:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klase
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: upozorenje:
'includeantruntime' nije postavljeno, zadana postavka je build.sysclasspath = last; postavljeno na false
za ponovljive građe
[javac] Prevođenje 1 izvorne datoteke u/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes

staklenka:
[mkdir] Izrađen direktorij:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Staklenka za izgradnju:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

GRADITI USPJEŠNO
Ukupno vrijeme: 6 sekundi

Jar datoteku možete isprobati ovako:

$ java -cp build/bin/helloworld.staklenkaPozdrav svijete
Pozdrav svijete!

Definirali smo jar datoteku za stavljanje u mapu build/bin. Mape se stvaraju tijekom izrade. Naredba ant jar poziva staklenku u build.xml.

Maven

Maven je razvijen za rješavanje problema s kojima se susreću skripte zasnovane na mravima. Čuvao je XML datoteke, ali je imao drugačiji pristup organizaciji. U Antu programeri moraju stvoriti sve zadatke. Maven smanjuje stvaranje zadataka primjenom jačih standarda za organizaciju koda. Zbog toga je lakše započeti sa standardnim projektima.

Također je uveo preuzimanja ovisnosti što je olakšalo razvoj. Prije uvođenja Ivy u Ant, korisnici su morali upravljati ovisnostima lokalno. Maven je prvo usvojio filozofiju upravljanja ovisnostima.

Međutim, strogi standardi Mavensa otežavaju pisanje skripti za prilagođenu izradu. S alatom je lako raditi sve dok projekt slijedi stroge standarde.

Pros

  • Automatsko preuzimanje ovisnosti
  • Sve se ovisnosti automatski bilježe u izvornoj kontroli kao dio skripti Maven
  • Standardizira i pojednostavljuje proces izgradnje
  • Lako se integrira s IDE -ima i CI/CD sustavima

Protiv

  • Nije fleksibilan u stvaranju prilagođenih tijekova rada
  • Novim početnicima teško je razumjeti strmu krivulju učenja i proces
  • Rješavanje problema izgradnje i novih integracija knjižnica oduzima mnogo vremena
  • Nije dobro s više verzija iste ovisnosti

Primjer Maven

Najnoviji Maven možete preuzeti s ovdje . Instalaciju možete provjeriti ovako:

$ mvn --verzija
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017. godine-10-18T00:58:13-07: 00)
Maven dom: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java verzija: 1.8.0_74, dobavljač: Oracle Corporation
Java početna stranica: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Sadržaj/Početna/jre
Zadani jezik: en_US, kodiranje platforme: UTF-8
Naziv OS -a:'mac os x', verzija:'10 .11.6 ', luk:'x86_64', obitelj:'mac'

Izradite mapu helloworld i generirajte projekt sa sljedećom naredbom:

$ mvn arhetip: generiranje -DgroupId = com.naziv tvrtke.Pozdrav svijete-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =lažno

Trebao bi stvoriti strukturu mapa i generirati izlaz koji izgleda ovako:

[INFO] Traženje projekata ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Projekt izgradnje Maven Stub projekta (nema POM -a) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generiraj (default-cli)> generiraj-izvore
@ standalone-pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ samostalni-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generiraj (default-cli) @ standalone-pom ---
[INFO] Generiranje projekta u paketnom načinu rada
[INFO] ----------------------------------------------- -----------------------------
[INFO] Korištenje sljedećih parametara za kreiranje projekta iz starog (1.x) arhetipa:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametar: basedir, Vrijednost:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametar: paket, Vrijednost: com.companyname.helloworld
[INFO] Parametar: groupId, vrijednost: com.companyname.helloworld
[INFO] Parametar: artifactId, Vrijednost: helloworld
[INFO] Parametar: packageName, Value: com.companyname.helloworld
[INFO] Parametar: verzija, Vrijednost: 1,0-SNAPHOT
[INFO] projekt izrađen od starog (1.x) arhetipa u direktoriju:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] IZGRADITE USPJEH
[INFO] ----------------------------------------------- -------------------------
[INFO] Ukupno vrijeme: 8.602 s
[INFO] Završeno: 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
| ``- sa
| ``- naziv tvrtke
| ``-- Pozdrav svijete
| ``- App.java
``-test
``-Java
``- sa
``- naziv tvrtke
``-- Pozdrav svijete
``- AppTest.java

Pom.xml sadrži konfiguracije gradnje. Unutar pom.xml kod izgleda ovako:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-instanca '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.naziv tvrtke.helloworld>
>Pozdrav svijete>
>staklenka>
>1,0-SNAPHOT>
>Pozdrav svijete>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>test>
>
>
>

Jar datoteku možete generirati pomoću sljedeće naredbe:

Paket od $ mvn

[INFO] Traženje projekata ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Izgradnja helloworld 1.0-SNAPHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[UPOZORENJE] Korištenje kodiranja platforme (zapravo UTF-8) za kopiranje filtriranih resursa, tj.
izrada ovisi o platformi!
[INFO] preskočite nepostojeći resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompajliraj (zadano-kompajliraj) @ helloworld ---
[INFO] Otkrivene promjene - ponovno sastavljanje modula!
[UPOZORENJE] Kodiranje datoteke nije postavljeno, pomoću kodiranja platforme UTF-8, tj. Izrada je
ovisi o platformi!
[INFO] Prevođenje 1 izvorne datoteke u/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/target/classes
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Pozdrav svijete ---
[UPOZORENJE] Korištenje kodiranja platforme (zapravo UTF-8) za kopiranje filtriranih resursa, tj.
izrada ovisi o platformi!
[INFO] preskočite nepostojeći resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Otkrivene promjene - ponovno sastavljanje modula!
[UPOZORENJE] Kodiranje datoteke nije postavljeno, pomoću kodiranja platforme UTF-8, tj. Izrada je
ovisi o platformi!
[INFO] Prevođenje 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šća Surefire:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
sigurna izvješća

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Pokretanje com.companyname.helloworld.AppTest
Pokrenuti testovi: 1, neuspjesi: 0, pogreške: 0, preskočeno: 0, proteklo vrijeme: 0.014 sek

Rezultati:

Pokrenuti testovi: 1, neuspjesi: 0, pogreške: 0, preskočeni: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (zadani-jar) @ helloworld ---
[INFO] Staklenka za izgradnju:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] IZGRADITE 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] ----------------------------------------------- -------------------------

Jar datoteku možete pokrenuti ovako:

$ java -cp target/helloworld-1.0-SNIMAK.staklenkas.naziv tvrtke.Pozdrav svijete.Aplikacija
Pozdrav svijete!

Jar datoteka se stavlja u ciljnu mapu.

Gradle

Gradle kombinira snagu Mrava i Mavena. Prva verzija Gradle objavljena je 2012. godine. Brzo je usvojena. Google ga trenutno koristi za Android OS.

Umjesto XML -a, Gradle koristi jezik Groovy. Zbog toga je skripte za gradnju u Gradleu lakše pisati i čitati. U početku je koristio Ivy za upravljanje ovisnostima, ali sada koristi vlastiti motor ovisnosti.

Pros

  • Omogućuje standardizaciju uz fleksibilnost
  • Lako čitanje i pisanje skripti za izgradnju
  • Bolje u rukovanju s više verzija ovisnosti
  • Sposoban za rukovanje s više programskih jezika i tehnologija
  • Aktivna zajednica pomaže u razvoju alata
  • Gradle DSL (jezik specifičan za domenu) čini jednostavnu konfiguracijsku strukturu
  • Gradle pruža 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 s ovdje . Nakon što postavite Gradle na svom putu, možete to provjeriti na sljedeći način:

$ gradle--verzija

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

Vrijeme izgradnje:2018. godine-01-24 17: 04:52UTC
Revizija: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Mrav: Apački mrav(TM)verzija 1.9.9 sastavljena u veljači2 2017. godine
JVM: 1.8.0_74(Oracle Corporation25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Zatim stvorite sljedeću strukturu direktorija:

Pozdrav svijete
| -izgraditi.gradle
``-src
| -glavni
``-Java
``-Pozdrav svijete
``-Pozdrav svijete.Java

Za helloworld.java stavite kôd iz primjera Ant. A za build.gradle unesite sljedeći kod:

primijeni dodatak: 'Java'

verzija= '1,0'

spremišta{
mavenCentral()
}

ovisnosti{
testCompile grupa: 'junit', Ime: 'junit', verzija: '4.12'
}

Možete koristiti gradle tasks –all naredbu za pregled svih dostupnih naredbi. Gradle automatski preuzima dodatke koje navedete u datoteci build.gradle i prikazuje vam dodatne zadatke koji su dostupni zbog dodataka.

Konstrukciju možete dobiti pokretanjem:

$ gradle staklenka

IZGRADITI USPJEŠNO u 1s
2radni zadaci:2pogubljen

Svoju staklenku možete pokrenuti ovako:

$ java -cp build/libs/helloworld-1.0.staklenkaPozdrav svijete
Pozdrav 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: