Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Ohjelmistokehityksen aikana kehittäjien on rakennettava sama koodi uudelleen ja uudelleen. He yrittävät usein käyttää bash -skriptejä tai muita skriptikieliä tehtävän automatisoimiseen. Saatavilla on kuitenkin rakennustyökaluja, jotka sopivat paremmin rakennusautomaatioon. Hallitsevat rakennustyökalut ovat:

Tutkitaan työkaluja saadaksesi lisätietoja.







Apache Ant ja Ivy

Apache Ant on Java-pohjainen komentorivityökalu, joka käyttää XML-tiedostoja määrittäessään rakennuskomentosarjoja. Sitä käytetään pääasiassa Java -rakennelmiin, mutta sitä voidaan käyttää myös C/C ++ -kehitykseen. Sisäänrakennetut tehtävät tarjoavat tapoja koota, koota, testata ja käyttää ohjelmistosovelluksia. Käyttäjät voivat myös luoda omia vastavalojaan parantaakseen Antin toimivuutta. Apache Ivy on riippuvuuksien hallintatyökalu, joka integroituu helposti Antin kanssa vahvemman ekosysteemin luomiseksi. Antin kehitys alkoi vuonna 2000.



Plussat



  • Parempi hallita koko rakennusprosessia
  • Riittävän joustava työskentelemään minkä tahansa työprosessin kanssa

Haittoja





  • XML -pohjaiset koontitiedostot voivat kasvaa suuriksi ja niitä ei voida ylläpitää
  • Rakennuskomentosarjojen ylläpitoon tarvitaan paljon aikaa ja resursseja
  • IDE -integraatiota on vaikea saavuttaa

Muurahainen Ivy -esimerkillä

Voit asentaa uusimman Antin osoitteesta tässä . Sinun on ladattava zip, laajennettava ja asetettava roskakorikansio polullesi. Voit tarkistaa seuraavan komennon avulla, onko Ant asennettu oikein:

$ muurahainen-versio
Apache Ant(TM)versio 1.10.1, koottu helmikuussa2 2017

Kun olet asentanut Antin, voit ladata uusimman Ivy -purkin ja laittaa sen Ant -hakemiston lib -kansioon.



Kun olet asentanut Antin, luo kansioita helloworld ja helloworld/src. Laita src -kansion sisälle helloworld.java -tiedosto, jossa on koodi:

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

Tulostaa Hello World!

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

julkinen luokkaHei maailma{

julkinen staattinen mitätöntärkein( Jousisoitin []args) {
Järjestelmä .ulos.println('Hei maailma!');
}

}

Luo nyt helloworld -kansioon build.xml -tiedosto, jolla on seuraava koodi:

xmlns: muratti='antlib: org.apache.ivy.ant' nimi='Hei maailma' oletusarvo='purkki'>

nimi='src.dir' arvo='src'/>
nimi='build.dir' arvo='rakentaa'/>
nimi='class.dir' arvo='$ {build.dir}/luokat'/>
nimi='am.dir' arvo='$ {build.dir} / bin'/>
nimi='lib.dir' arvo='lib' />
id='lib.path.id'>
sinulle='$ {lib.dir}' />
>

nimi='ratkaista'>
/>
>

nimi='puhdas'>
sinulle='$ {build.dir}'/>
>

nimi='koota' riippuu='ratkaista'>
sinulle='$ {class.dir}'/>
srcdir='$ {src.dir}' destdir='$ {class.dir}' classpathref='lib.path.id'/>
>

nimi='purkki' riippuu='koota'>
sinulle='$ {bin.dir}'/>
tuhota='$ {bin.dir}/$ {ant.project.name} .jar' perustuen='$ {class.dir}'/>
>

>

Luo samaan helloworld -kansioon ivy.xml -tiedosto seuraavalla koodilla:

versio='2.0'>
organisaatio='org.apache' moduuli='Hei maailma'/>
>
org='junit' nimi='junit' rev='4.12'/>
>
>

Hakemistorakenteen pitäisi näyttää tältä:

Hei maailma
|- build.xml
| - muratti.xml
`- src
`- helloworld.java

Nyt voit suorittaa rakennuksen komennolla:

$muurahainenpurkki

Onnistuneen rakenteen pitäisi tuottaa seuraavanlainen tulos:

$ muurahaispurkki
Rakennustiedosto: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

ratkaista:
[muratti: hae] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: noutaa] :: latausasetukset :: 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
[muratti: hae] :: riippuvuuksien ratkaiseminen :: org.apache#helloworld; [sähköposti suojattu]
MacBook-Air. Paikallinen
[muratti: hae] confs: [oletus]
[muratti: noutaa] löytyi junit#junit; 4.12 julkisesti
[muratti: hae] löytyi org.hamcrest#hamcrest-core; 1.3 julkisesti
[muratti: hae] :: päätöslauselmaraportti :: ratkaise 397 ms :: artefaktit dl 15 ms
-------------------------------------------------- -------------------
| | moduulit || esineitä |
| conf | numero | etsi | häipynyt | häädetty || numero | hukassa |
-------------------------------------------------- -------------------
| oletus | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[muratti: hae] :: nouto :: org.apache#helloworld
[muratti: hae] confs: [oletus]
[muratti: hae] 0 esineitä kopioitu, 4 jo haettu (0 kt/39 ms)

koota:
[mkdir] Luotu ohj:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
luokat
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: varoitus:
'includeantruntime' -asetusta ei ole määritetty, oletusarvo on build.sysclasspath = last; asetettu arvoon false
toistettaville rakenteille
[javac] 1 lähdetiedoston kokoaminen/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/rakentaa/luokat

purkki:
[mkdir] Luo kansio:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Rakennuspurkki:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

RAKENNETTU MENESTYNYT
Kokonaisaika: 6 sekuntia

Voit kokeilla jar -tiedostoa seuraavasti:

$ java -cp build/bin/helloworld.purkkiHei maailma
Hei maailma!

Olemme määrittäneet jar -tiedoston, joka laitetaan build/bin -kansioon. Kansiot luodaan rakentamisen aikana. Ant jar -komento kutsuu jar.kohteen build.xml -tiedostossa.

Maven

Maven kehitettiin ratkaisemaan Ant-pohjaisen komentosarjan ongelmat. Se säilytti XML -tiedostot, mutta otti erilaisen lähestymistavan organisaatioon. Antissa kehittäjien on luotava kaikki tehtävät. Maven vähentää tehtävien luomista ottamalla käyttöön tiukempia standardeja koodin järjestämiseen. Tämän seurauksena on helpompi aloittaa vakioprojekteissa.

Se esitteli myös riippuvuuslatauksia, jotka helpottivat kehitystä. Ennen Ivyin käyttöönottoa Antissa käyttäjien oli hallittava riippuvuuksia paikallisesti. Maven omaksui ensin riippuvuuksien hallinnan filosofian.

Mavensin tiukat standardit vaikeuttavat kuitenkin räätälöityjen komentosarjojen kirjoittamista. Työkalua on helppo käyttää, kunhan projekti noudattaa tiukkoja standardeja.

Plussat

  • Automaattiset riippuvuuslataukset
  • Kaikki riippuvuudet tallennetaan automaattisesti lähdeohjaukseen osana Maven -komentosarjoja
  • Standardoi ja yksinkertaistaa rakennusprosessia
  • Helppo integroida IDE- ja CI/CD -järjestelmiin

Haittoja

  • Ei joustava mukautettujen työnkulkujen luomisessa
  • Jyrkkä oppimiskäyrä ja prosessi on aloittelijoiden vaikea ymmärtää
  • Rakentamiseen liittyvien ongelmien ja uusien kirjastointegraatioiden ratkaiseminen vie aikaa
  • Ei hyvä, jos samasta riippuvuudesta on useita versioita

Esimerkki Mavenista

Voit ladata uusimman Mavenin osoitteesta tässä . Voit tarkistaa asennuksen seuraavasti:

$ mvn --versio
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Mavenin kotisivu: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java -versio: 1.8.0_74, toimittaja: Oracle Corporation
Java -etusivu: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Sisältö/Etusivu/jre
Oletuskieli: en_US, alustan koodaus: UTF-8
Käyttöjärjestelmän nimi:'Mac-käyttöjärjestelmän kymmenes versio', versio:'10 .11,6 ', kaari:'x86_64', perhe:'mac'

Luo helloworld -kansio ja luo projekti seuraavalla komennolla:

$ mvn arkkityyppi: luo -DgroupId = com.Yrityksen nimi.Hei maailma-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =väärä

Sen pitäisi luoda kansiorakenne ja luoda tulos, joka näyttää tältä:

[INFO] Etsitään projekteja ...
[TIEDOT]
[INFO] ----------------------------------------------- -------------------------
[INFO] Rakennus Maven Stub Project (No POM) 1
[INFO] ----------------------------------------------- -------------------------
[TIEDOT]
[INFO] >>> maven-archetype-plugin: 3.0.0 :generate (default-cli) >gene-sources
@ itsenäinen pom >>>
[TIEDOT]
[TIEDOT]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom<<<
[TIEDOT]
[TIEDOT]
[INFO] --- maven-archetype-plugin: 3.0.0: create (default-cli) @ standalone-pom ---
[INFO] Luodaan projekti erätilassa
[INFO] ----------------------------------------------- -----------------------------
[INFO] Seuraavien parametrien käyttäminen projektin luomiseen vanhasta (1.x) arkkityypistä:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametri: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametri: paketti, arvo: com.comyhtiönimi.helloworld
[INFO] Parametri: groupId, Value: com.comyhtiönimi.helloworld
[INFO] Parametri: artifactId, Arvo: helloworld
[INFO] Parametri: packageName, Value: com.comyrityksenimi.helloworld
[INFO] Parametri: versio, arvo: 1.0-SNAPSHOT
[INFO] -projekti luotu vanhasta (1.x) arkkityypistä ohjauksessa:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] RAKENNA MENESTYS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kokonaisaika: 8,602 s
[INFO] Valmistui: 2018-01-27T00: 05: 37-08: 00
[INFO] Lopullinen muisti: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Kansiorakenteen pitäisi näyttää tältä:

Hei maailma
|- pom.xml
``- src
|- pää
| ``-java
| ``-- kanssa
| ``-- Yrityksen nimi
| ``-- Hei maailma
| ``- Sovellus. Java
``-testata
``-java
``-- kanssa
``-- Yrityksen nimi
``-- Hei maailma
``- AppTest.java

Pom.xml sisältää koontimääritykset. Pom.xml -koodin sisällä koodi näyttää tältä:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='' http://www.w3.org/2001/
XMLSchema-esiintymä '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.comyhtiönimi.helloworld>
>Hei maailma>
>purkki>
>1.0-SNAPSHOT>
>Hei maailma>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>testata>
>
>
>

Voit luoda jar -tiedoston seuraavan komennon avulla:

$ mvn paketti

[INFO] Etsitään projekteja ...
[TIEDOT]
[INFO] ----------------------------------------------- -------------------------
[INFO] Rakenna helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[TIEDOT]
[INFO] --- maven-resources-plugin: 2.6: resurssit (oletusresurssit) @ helloworld ---
[VAROITUS] Alustan koodauksen (UTF-8) käyttäminen suodatettujen resurssien kopioimiseen, ts.
rakenne riippuu alustasta!
[INFO] ohita olemassa oleva resurssihakemisto/Käyttäjät/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[TIEDOT]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Muutoksia havaittu - moduulin kokoaminen uudelleen!
[VAROITUS] Tiedoston koodausta ei ole määritetty käyttämällä UTF-8-käyttöympäristökoodausta eli koontiversiota
alustasta riippuvainen!
[INFO] 1 lähdetiedoston kokoaminen/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/kohde/luokat
[TIEDOT]
[INFO] --- maven-resources-plugin: 2.6: testResources (oletus-testResources) @
Hei maailma ---
[VAROITUS] Alustan koodauksen (UTF-8) käyttäminen suodatettujen resurssien kopioimiseen, ts.
rakenne riippuu alustasta!
[INFO] ohita olemassa oleva resurssihakemisto/Käyttäjät/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[TIEDOT]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Muutoksia havaittu - moduulin kokoaminen uudelleen!
[VAROITUS] Tiedoston koodausta ei ole määritetty käyttämällä UTF-8-käyttöympäristökoodausta eli koontiversiota
alustasta riippuvainen!
[INFO] 1 lähdetiedoston kääntäminen/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-class
[TIEDOT]
[INFO] --- maven-surefire-plugin: 2.12.4: testi (oletustesti) @ helloworld ---
[INFO] Surefire -raporttihakemisto:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
varmoja raportteja

-------------------------------------------------- -----
T E S T S.
-------------------------------------------------- -----
Käynnissä com.companyname.helloworld.AppTest
Testit suoritetaan: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0, kulunut aika: 0,014 sek

Tulokset:

Testit suoritetaan: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0

[TIEDOT]
[INFO] --- maven-jar-plugin: 2.4: jar (oletus-jar) @ helloworld ---
[INFO] Rakennuspurkki:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] RAKENNA MENESTYS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kokonaisaika: 5,624 s
[INFO] Valmistui: 2018-01-27T00: 11: 10-08: 00
[INFO] Lopullinen muisti: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Voit suorittaa jar -tiedoston seuraavasti:

$ java -cp target/helloworld-1.0-KUVAUS.purkkikanssa.Yrityksen nimi.Hei maailma.Sovellus
Hei maailma!

Jar -tiedosto laitetaan kohdekansioon.

Gradle

Gradle yhdistää Antin ja Mavenin voiman. Ensimmäinen versio Gradlesta julkaistiin vuonna 2012. Se on nähnyt nopean käyttöönoton. Google käyttää sitä tällä hetkellä Android -käyttöjärjestelmälle.

Gradle käyttää XML: n sijasta Groovyn kieltä. Tämän seurauksena Gradlen skriptien kirjoittaminen ja lukeminen on helpompaa. Se käytti alun perin Ivyä riippuvuuden hallintaan, mutta nyt se käyttää omaa riippuvuusmoottoriaan.

Plussat

  • Tarjoaa standardoinnin pysyen joustavana
  • Helppo lukea ja kirjoittaa rakentaa komentosarjoja
  • Parempi käsitellä useita versioita riippuvuuksista
  • Pystyy käsittelemään useita ohjelmointikieliä ja -tekniikoita
  • Aktiivinen yhteisö auttaa työkalun kehittämisessä
  • Gradle DSL (Domain-Specific Language) tekee siitä yksinkertaisen kokoonpanorakenteen
  • Gradle tarjoaa suorituskyvyn parannuksia asteittain, rakenna välimuisti ja Gradle Daemon

Haittoja

  • IDE -integraatio ei ole yhtä hyvä kuin Maven

Gradle Esimerkki

Voit asentaa Gradlen osoitteesta tässä . Kun olet määrittänyt Gradlen polullesi, voit tarkistaa sen seuraavasti:

$ gradle--versio

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

Rakennusaika:2018-01-24 17: 04:52UTC
Versio: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Muurahainen: Apache Ant(TM)versio 1.9.9, koottu helmikuussa2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Käyttöjärjestelmä: Mac OS X 10.11.6 x86_64

Luo seuraavaksi seuraava hakemistorakenne:

Hei maailma
| -rakentaa.asteikko
``-src
| -tärkein
``-java
``-Hei maailma
``-Hei maailma.java

Saat helloworld.java koodin Ant -esimerkistä. Ja build.gradle varten kirjoita seuraava koodi:

käytä laajennusta: 'java'

versio= '1.0'

arkistot{
mavenCentral()
}

riippuvuuksia{
testCompile -ryhmä: 'junit', nimi: 'junit', versio: '4.12'
}

Voit tarkastella kaikkia käytettävissä olevia komentoja asteikkotehtävillä - kaikki komento. Gradle hakee automaattisesti build.gradle -tiedostossa määrittämäsi laajennukset ja näyttää laajennuksista johtuvat lisätehtävät.

Voit saada rakenteen suorittamalla:

$ gradle purkki

RAKENTAA MENESTYNYT 1 sekunnissa
2toteutettavat tehtävät:2teloitettu

Voit käyttää purkkiasi seuraavasti:

$ java -cp build/libs/helloworld-1.0.purkkiHei maailma
Hei maailma!

Jar -tiedosto tallennetaan build/libs -kansioon.

Johtopäätös

Rakennustyökaluista Ant voi olla hyödyllinen pienemmissä projekteissa, kun taas Maven varmistaa paremmin, että kaikki kehittäjät noudattavat samoja sääntöjä. Gradle on uusin työkalu, joka tarjoaa eniten joustavuutta.

Viitteet: