Sipelgas vs Maven vs Gradle

Ant Vs Maven Vs Gradle

Tarkvara arendamise ajal peavad arendajad sama koodi uuesti ja uuesti üles ehitama. Sageli proovivad nad ülesande automatiseerimiseks kasutada bash -skripte või muid skriptikeeli. Siiski on saadaval ehitustööriistu, mis on ehituse automatiseerimiseks sobivamad. Peamised ehitustööriistad on:

Uurime tööriistu, et rohkem teada saada.



Apache Ant koos Ivyga

Apache Ant on Java-põhine käsureatööriist, mis kasutab ehitusskriptide määratlemiseks XML-faile. Seda kasutatakse peamiselt Java -ehitiste jaoks, kuid seda saab kasutada ka C/C ++ arendamiseks. Sisseehitatud ülesanded pakuvad võimalusi tarkvararakenduste koostamiseks, kokkupanekuks, testimiseks ja käitamiseks. Kasutajad saavad Ant -i funktsionaalsuse parandamiseks luua ka oma liibusid. Apache Ivy on sõltuvuste haldamise tööriist, mis integreerub hõlpsalt Antiga, et pakkuda tugevamat ökosüsteemi. Sipelga arendamine algas 2000. aastal.



Plussid



  • Parem kontroll kogu ehitusprotsessi üle
  • Piisavalt paindlik, et töötada mis tahes tööprotsessiga

Miinused

  • XML -põhised koostamisfailid võivad suureneda ja neid ei saa hooldada
  • Ehitusskriptide säilitamiseks on vaja palju aega ja ressursse
  • IDE integratsiooni on raske saavutada

Sipelgas luuderohuga Näide

Saate installida uusima Ant siin . Peate alla laadima ZIP -faili, laiendama ja panema prügikasti oma teele. Järgmise käsu abil saate kontrollida, kas Ant on õigesti installitud:

$ ant-versioon
Apache Ant(TM)versioon 1.10.1 koostatud veebruaris2 2017.

Kui olete Ant installinud, saate alla laadida uusima Ivy purgi ja panna selle kataloogi Ant kataloogi lib kausta.



Pärast Ant'i installimist looge kaustad helloworld ja helloworld/src. Pange src kausta sisse fail helloworld.java koos koodiga:

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

Prindib välja 'Tere maailm!'

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

avalik klassiTere, Maailm{

avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.println('Tere, Maailm!');
}

}

Nüüd looge kaustas helloworld fail build.xml järgmise koodiga:

xmlns: luuderohi='antlib: org.apache.ivy.ant' nimi='Tere, Maailm' vaikimisi='purk'>

nimi='src.dir' väärtus='src'/>
nimi='build.dir' väärtus='ehitama'/>
nimi='klassid.dir' väärtus=„$ {build.dir}/klassid”/>
nimi='am.dir' väärtus=„$ {build.dir} / prügikast”/>
nimi='lib.dir' väärtus='lib' />
id='lib.path.id'>
sulle=„$ {lib.dir}” />
>

nimi='lahendama'>
/>
>

nimi='puhas'>
sulle=„$ {build.dir}”/>
>

nimi='kompileeri' sõltub='lahendama'>
sulle=„$ {class.dir}”/>
srcdir=„$ {src.dir}” destdir=„$ {class.dir}” classpathref='lib.path.id'/>
>

nimi='purk' sõltub='kompileeri'>
sulle=„$ {bin.dir}”/>
hävitama=„$ {bin.dir}/$ {ant.project.name} .jar” aluseks=„$ {class.dir}”/>
>

>

Ja looge samasse helloworldi kausta faili ivy.xml järgmise koodiga:

versioon=„2.0”>
organisatsioon='org.apache' moodul='Tere, Maailm'/>
>
org='junit' nimi='junit' rev=„4.12”/>
>
>

Kataloogistruktuur peaks välja nägema selline:

Tere, Maailm
|- build.xml
| - luuderohi.xml
`- src
`- helloworld.java

Nüüd saate ehitamist käivitada käsuga:

$sipelgaspurk

Edukas ehitamine peaks andma järgmise väljundi:

$ sipelga purk
Ehitusfail: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

lahendada:
[luuderohi: allalaadimine] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: laadida] :: laadimisseaded :: url = jar: file:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[luuderohi: allalaadimine] :: sõltuvuste lahendamine :: org.apache#helloworld; [e -post kaitstud]
MacBook-Air.local
[ivy: laadida] confs: [vaikimisi]
[ivy: retrieve] leidis avalikult junit#junit; 4.12
[luuderohi: toomine] leiti org.hamcrest#hamcrest-core; 1.3 avalikult
[luuderohi: allalaadimine] :: resolutsiooniaruanne :: lahendamine 397 ms :: esemed dl 15 ms
-------------------------------------------------- -------------------
| | moodulid || esemed |
| conf | number | otsi | äraheidetud | välja tõstetud || arv | maha surutud |
-------------------------------------------------- -------------------
| vaikimisi | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[luuderohi: laadida] :: allalaadimine :: org.apache#helloworld
[ivy: laadida] confs: [vaikimisi]
[luuderohi: toomine] 0 artefakti on kopeeritud, 4 on juba alla laaditud (0 kB/39 ms)

koostada:
[mkdir] Loodud dir:/Kasutajad/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klassid
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: hoiatus:
'includeantruntime' ei olnud määratud, vaikimisi build.sysclasspath = last; väärtuseks vale
korratavate ehitiste jaoks
[javac] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/klassid

purk:
[mkdir] Loodud dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[purk] Ehituspurk:/Kasutajad/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

EHITATUD EHITADA
Koguaeg: 6 sekundit

Purgi faili saate proovida järgmiselt:

$ java -cp build/bin/helloworld.purkTere, Maailm
Tere, Maailm!

Oleme määratlenud jar/faili, mis pannakse kausta build/bin. Kaustad luuakse ehitamise ajal. Sipelgapurgi käsk kutsub purgi sihtmärki failis build.xml.

Maven

Maven töötati välja sipelgapõhiste skriptidega seotud probleemide lahendamiseks. See säilitas XML -failid, kuid lähenes organisatsioonile erinevalt. Antis peavad arendajad looma kõik ülesanded. Maven vähendab ülesannete loomist, rakendades koodi korraldamiseks rangemaid standardeid. Selle tulemusel on lihtsam alustada standardprojektidega.

See tutvustas ka sõltuvuse allalaadimist, mis muutis arengu lihtsamaks. Enne Ivy kasutuselevõttu Antis pidid kasutajad sõltuvusi kohapeal haldama. Maven võttis kõigepealt vastu sõltuvusjuhtimise filosoofia.

Kuid Mavensi ranged standardid muudavad kohandatud ehitusskriptide kirjutamise keeruliseks. Tööriistaga on lihtne töötada, kui projekt järgib rangeid standardeid.

Plussid

  • Sõltuvuse automaatne allalaadimine
  • Kõik sõltuvused salvestatakse Maveni skriptide osana automaatselt allika juhtelementi
  • Standardiseerib ja lihtsustab koostamisprotsessi
  • Lihtsalt integreeritav IDE -de ja CI/CD süsteemidega

Miinused

  • Pole paindlik kohandatud töövoogude loomisel
  • Järsk õppimiskõver ja seda protsessi on algajatel raske mõista
  • Koostamisprobleemide ja uute raamatukogude integreerimise lahendamine on aeganõudev
  • Ei ole hea sama sõltuvuse mitme versiooniga

Maveni näide

Uusima Maveni saate alla laadida saidilt siin . Saate installimist kontrollida järgmiselt.

$ mvn -versioon
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maveni kodu: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java versioon: 1.8.0_74, müüja: Oracle Corporation
Java avaleht: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Sisu/Avaleht/jre
Vaikimisi lokaat: en_US, platvormi kodeering: UTF-8
OS -i nimi:'mac os x', versioon:„10 .11,6”, kaar:'x86_64', perekond:'mac'

Looge helloworld kaust ja genereerige projekt järgmise käsuga:

$ mvn arhetüüp: genereeri -DgroupId = com.ettevõtte nimi.Tere, Maailm-DartifactId = teremaailm
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =vale

See peaks looma kaustastruktuuri ja genereerima väljundi, mis näeb välja selline:

[INFO] Projektide otsimine ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Maven Stub'i ehitamine (POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: create (default-cli)> create-sources
@ iseseisev pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ iseseisev-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generate (default-cli) @ standalone-pom ---
[INFO] Projekti loomine partiirežiimis
[INFO] ----------------------------------------------- -----------------------------
[INFO] Kasutades järgmisi parameetreid projekti loomiseks vanast (1.x) arhetüübist:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameeter: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameeter: pakett, väärtus: com.comettevõtte nimi.helloworld
[INFO] Parameeter: groupId, Value: com.comfirmanimi.helloworld
[INFO] Parameeter: artifactId, väärtus: helloworld
[INFO] Parameeter: packageName, Value: com.comfirmanimi.helloworld
[INFO] Parameeter: versioon, väärtus: 1.0-SNAPSHOT
[INFO] projekt on loodud vanast (1.x) arhetüübist rež./Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] EHITUSE EHITAMINE
[INFO] ----------------------------------------------- -------------------------
[INFO] Koguaeg: 8,602 s
[INFO] Lõpetatud: 2018-01-27T00: 05: 37-08: 00
[INFO] Lõpumälu: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Kausta struktuur peaks välja nägema selline:

Tere, Maailm
|- pom.xml
''- src
|- peamine
| ''-java
| ''- koos
| ''- ettevõtte nimi
| ''-- Tere, Maailm
| ''- App.java
''-test
''-java
''- koos
''- ettevõtte nimi
''-- Tere, Maailm
''- AppTest.java

Pom.xml sisaldab ehituse konfiguratsioone. Pom.xml sees näeb kood välja selline:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi=„http://www.w3.org/2001/
XMLSchema-eksemplar '
xsi: schemaLocation=„http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.comfirmanimi.helloworld>
>Tere, Maailm>
>purk>
>1.0-SNAPSHOT>
>Tere, Maailm>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>test>
>
>
>

Jar -faili saate genereerida järgmise käsu abil:

$ mvn pakett

[INFO] Projektide otsimine ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Helloworldi ehitamine 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[HOIATUS] Platvormi kodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.
build sõltub platvormist!
[INFO] jätke olematu ressurss vahele Kataloog/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompileeri (vaikimisi kompileeri) @ helloworld ---
[INFO] Tuvastati muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failide kodeeringut ei ole määratud, kasutades platvormi kodeeringut UTF-8, s.t. build
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnMaven/
teremaailm/sihtmärk/klassid
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Tere, Maailm ---
[HOIATUS] Platvormi kodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.
build sõltub platvormist!
[INFO] jätke olematu ressurss vahele Kataloog/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Tuvastati muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failide kodeeringut ei ole määratud, kasutades platvormi kodeeringut UTF-8, s.t. build
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-class
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (vaikimisi test) @ helloworld ---
[INFO] Surefire aruannete kataloog:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
kindlad aruanded

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Käivitab com.comfirmanimi.helloworld.AppTest
Testid: 1, ebaõnnestumised: 0, vead: 0, vahele jäetud: 0, kulunud aeg: 0,014 sekundit

Tulemused :

Testid: 1, ebaõnnestumised: 0, vead: 0, vahele jäetud: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (vaikimisi purk) @ helloworld ---
[INFO] Ehituspurk:/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] EHITUSE EHITAMINE
[INFO] ----------------------------------------------- -------------------------
[INFO] Koguaeg: 5,624 s
[INFO] Lõpetatud: 2018-01-27T00: 11: 10-08: 00
[INFO] Lõpumälu: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Jar -faili saate käivitada järgmiselt.

$ java -cp target/helloworld-1.0-SNAPSHOT.purkkoos.ettevõtte nimi.Tere, Maailm.Rakendus
Tere, Maailm!

Purkfail pannakse sihtkausta.

Gradle

Gradle ühendab endas Sipelga ja Maveni jõu. Gradle'i esimene versioon ilmus 2012. aastal. See on kiiresti kasutusele võetud. Google kasutab seda praegu Android OS -i jaoks.

XML -i asemel kasutab Gradle Groovy keelt. Selle tulemusena on Gradle'i skripte lihtsam kirjutada ja lugeda. Algselt kasutas see sõltuvuste haldamiseks Ivy -d, kuid nüüd kasutab see oma sõltuvusmootorit.

Plussid

  • Pakub standardimist, jäädes samas paindlikuks
  • Lihtne lugeda ja kirjutada ehitusskripte
  • Parem on hakkama saada mitme sõltuvusversiooniga
  • Saab hakkama mitme programmeerimiskeele ja tehnoloogiaga
  • Aktiivne kogukond aitab tööriista välja töötada
  • Gradle DSL (domeenispetsiifiline keel) muudab selle lihtsaks konfiguratsioonistruktuuriks
  • Gradle pakub jõudluse täiustusi, kasutades järk -järgult, vahemälu ja Gradle Daemoni

Miinused

  • IDE integratsioon pole nii hea kui Maven

Gradle'i näide

Gradle'i saate installida aadressilt siin . Kui olete Gradle'i oma teele seadistanud, saate seda kontrollida järgmiselt.

$ gradle--versioon

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

Ehitamise aeg:2018-01-24 17: 04:52UTC
Läbivaatamine: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Sipelgas: Apache Ant(TM)versioon 1.9.9 koostatud veebruaris2 2017.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64

Seejärel looge järgmine kataloogistruktuur:

Tere, Maailm
| -ehitada.gradle
''-src
| -peamine
''-java
''-Tere, Maailm
''-Tere, Maailm.java

Helloworld.java jaoks pange kood sipelga näitest. Ja build.gradle jaoks sisestage järgmine kood:

rakendage pluginat: 'java'

versioon= '1.0'

hoidlad{
mavenCentral()
}

sõltuvused{
testCompile rühm: 'junit', nimi: 'junit', versioon: „4.12”
}

Kõigi saadaolevate käskude vaatamiseks saate kasutada käsku gradle ülesanded - kõik. Gradle võtab automaatselt üles failis build.gradle määratud pistikprogrammid ja näitab lisandmoodulite tõttu saadaolevaid lisaülesandeid.

Ehituse saate joostes:

$ gradle purk

EHITADA EDUKAS 1 sekundi jooksul
2teostatavad ülesanded:2hukati

Saate oma purki käivitada järgmiselt:

$ java -cp build/libs/helloworld-1.0.purkTere, Maailm
Tere, Maailm!

Jar -fail pannakse kausta build/libs.

Järeldus

Ehitustööriistade hulgas võib Ant olla kasulik väiksemate projektide jaoks, samas kui Maven on parem veendumaks, et kõik arendajad järgivad samu reegleid. Gradle on uusim tööriist, mis pakub kõige rohkem paindlikkust.

Viited: