Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Sa panahon ng pag-unlad ng software, ang mga developer ay kailangang muling itayo ang parehong code nang paulit-ulit. Madalas nilang subukan na gumamit ng mga script ng bash o iba pang mga wika sa pag-script upang i-automate ang gawain. Gayunpaman, may magagamit na mga tool sa pagbuo na mas naaangkop para sa pagbuo ng awtomatiko. Ang nangingibabaw na mga tool sa pagbuo ay:

Suriin natin ang mga tool upang malaman ang higit pa.







Apache Ant kasama si Ivy

Ang Apache Ant ay isang tool na linya ng utos na nakabatay sa Java na gumagamit ng mga XML file upang tukuyin ang mga build script. Mahigit na ginagamit ito para sa Java builds ngunit maaari rin itong magamit para sa pag-unlad ng C / C ++. Ang mga built-in na gawain ay nagbibigay ng mga paraan upang mag-ipon, mag-ipon, subukan at patakbuhin ang mga application ng software. Ang mga gumagamit ay maaari ring lumikha ng kanilang sariling mga antlib upang mapagbuti ang pagpapaandar ng Ant. Ang Apache Ivy ay isang tool sa pamamahala ng dependency na madaling isinasama sa Ant upang magbigay ng isang mas matatag na ecosystem. Ang pag-unlad ng Ant ay nagsimula noong 2000.



Mga kalamangan



  • Mas mahusay na kontrol sa pangkalahatang proseso ng pagbuo
  • Sapat na maiangkop upang gumana sa anumang proseso ng trabaho

Kahinaan





  • Ang mga XML based build file ay maaaring lumago nang malaki at hindi maaabot
  • Maraming oras at mapagkukunan ang kinakailangan upang mapanatili ang mga script ng pagbuo
  • Ang pagsasama ng IDE ay mahirap makamit

Ant na may Ivy Halimbawa

Maaari mong i-install ang pinakabagong Ant mula sa dito . Kailangan mong i-download ang zip, palawakin at ilagay ang folder ng bin sa iyong landas. Maaari mong gamitin ang sumusunod na utos upang makita kung ang Ant ay na-install nang maayos:

$ ant-pagbagong loob
Apache Ant(TM)bersyon 1.10.1 na naipon noong Pebrero2 2017.

Kapag na-install mo na ang Ant, maaari mong i-download ang pinakabagong Ivy jar at ilagay ito sa lib folder sa loob ng direktoryo ng Ant.



Matapos mong mai-install ang Ant, lumikha ng mga folder na helloworld at helloworld / src. Sa loob ng folder ng src, ilagay ang file na helloworld.java kasama ang code:

/ *****

Nai-print ang 'Hello World!'

*****

pampubliko klasehelloworld{

pampubliko static walang bisapangunahing( String []mga pagtatalo) {
Sistema .palabas.println('Hello World!');
}

}

Ngayon sa folder ng helloworld lumikha ng isang build.xml file na may sumusunod na code:

xmlns: ivy='antlib: org.apache.ivy.ant' pangalan='helloworld' default='garapon'>

pangalan='src.dir' halaga='src'/>
pangalan='build.dir' halaga='build'/>
pangalan='mga klase.dir' halaga='$ {build.dir} / mga klase'/>
pangalan='am.dir' halaga='$ {build.dir} / bin'/>
pangalan='lib.dir' halaga='lib' />
id='lib.path.id'>
sa iyo='$ {lib.dir}' />
>

pangalan='resolbahin'>
/>
>

pangalan='malinis'>
sa iyo='$ {build.dir}'/>
>

pangalan='compile' depende='resolbahin'>
sa iyo='$ {class.dir}'/>
srcdir='$ {src.dir}' destdir='$ {class.dir}' classpathref='lib.path.id'/>
>

pangalan='garapon' depende='compile'>
sa iyo='$ {bin.dir}'/>
walang kabuluhan='$ {bin.dir} / $ {ant.project.name} .jar' basedir='$ {class.dir}'/>
>

>

At sa parehong folder ng helloworld, lumikha ng ivy.xml file na may sumusunod na code:

bersyon='2.0'>
samahan='org.apache' modyul='helloworld'/>
>
org='junit' pangalan='junit' rev='4.12'/>
>
>

Ang istraktura ng direktoryo ay dapat magmukhang ganito:

helloworld
| - build.xml
| - ivy.xml
`- src
`- helloworld.java

Ngayon ay maaari mong patakbuhin ang pagbuo gamit ang utos:

$langgamgarapon

Ang isang matagumpay na pagbuo ay dapat magbigay ng output tulad nito:

$ ant jar
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

malutas:
[ivy: kunin] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: kunin] :: loading setting :: 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
[ivy: kunin] :: paglutas ng mga dependency :: org.apache # helloworld; [protektado ng email]
MacBook-Air.local
[ivy: kunin] confs: [default]
Nahanap ni [ivy: kunin] ang junit # junit; 4.12 sa publiko
[ivy: kunin] natagpuan org.hamcrest # hamcrest-core; 1.3 sa publiko
[ivy: kunin] :: ulat ng resolusyon :: lutasin ang 397ms :: artifact dl 15ms
---- -------------------
| | mga modyul || artifact |
| conf | numero | paghahanap | dwnlded | pinalayas || numero | dwnlded |
---- -------------------
| default | 2 | 0 | 0 | 0 || 4 | 0 |
---- -------------------
[ivy: kunin] :: pagkuha :: :: org.apache # helloworld
[ivy: kunin] confs: [default]
[ivy: kunin] 0 artifact ang nakopya, 4 na nakuha (0kB / 39ms)

magtipon:
[mkdir] Nilikha dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
mga klase
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml 22: babala:
'isama angantruntime' ay hindi naitakda, defaulting to build.sysclasspath = huling; itinakda sa hindi totoo
para sa mauulit na pagbuo
[javac] Pagbuo ng 1 mapagkukunang file sa / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / klase

garapon:
[mkdir] Nilikha dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Building jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
helloworld.jar

MABUTI ang tagumpay
Kabuuang oras: 6 segundo

Maaari mong subukan ang jar file na tulad nito:

$ java -cp build / bin / helloworld.garaponhelloworld
Kamusta Mundo!

Natukoy namin ang file ng jar na ilalagay sa build / bin folder. Nilikha ang mga folder sa panahon ng pagbuo. Tinatawag ng utos ng ant jar ang target ng garapon sa build.xml.

Maven

Ang Maven ay binuo upang malutas ang mga problemang kinakaharap sa Ant-based scripting. Iningatan nito ang mga XML file ngunit kumuha ng ibang diskarte sa samahan. Sa Ant, kailangang lumikha ng mga developer ng lahat ng mga gawain. Binabawasan ni Maven ang paggawa ng gawain sa pamamagitan ng pagpapatupad ng mas malakas na mga pamantayan para sa pag-aayos ng code. Bilang isang resulta, mas madaling magsimula sa mga karaniwang proyekto.

Nagpakilala din ito ng mga pag-download ng dependency na naging madali ang pagpapaunlad. Bago ang pagpapakilala ng Ivy sa Ant, ang mga gumagamit ay kailangang pamahalaan ang mga dependency nang lokal. Ginamit muna ni Maven ang pilosopiya ng pamamahala ng dependency.

Gayunpaman, ang mga mahigpit na pamantayan ng Mavens ay nagpapahirap sa pagsulat ng mga pasadyang script sa pagbuo. Madaling magtrabaho ang tool basta't sundin ng proyekto ang mahigpit na pamantayan.

Mga kalamangan

  • Mga awtomatikong pag-download ng dependency
  • Ang lahat ng mga dependency ay awtomatikong naitala sa control ng mapagkukunan bilang bahagi ng mga script ng Maven
  • Normalize at pinapasimple ang proseso ng pagbuo
  • Madaling isinasama sa mga IDE at CI / CD system

Kahinaan

  • Hindi nababaluktot sa paglikha ng mga pasadyang daloy
  • Matarik na curve sa pag-aaral at ang proseso ay mahirap maunawaan ng mga baguhan
  • Gumugugol ng oras upang malutas ang mga problema sa pagbuo at mga bagong pagsasama ng library
  • Hindi maganda sa maraming mga bersyon ng parehong pagtitiwala

Halimbawa ni Maven

Maaari mong i-download ang pinakabagong Maven mula sa dito . Maaari mong suriin ang pag-install tulad nito:

$ mvn --versi
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maven home: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Bersyon ng Java: 1.8.0_74, vendor: Oracle Corporation
Tahanan sa Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/ Mga Nilalaman / Tahanan / jre
Default na lokal: en_US, pag-encode ng platform: UTF-8
Pangalan ng OS:'mac os x', bersyon:'10 .11.6 ', arko:'x86_64', pamilya:'mac'

Lumikha ng isang folder ng helloworld at bumuo ng isang proyekto gamit ang sumusunod na utos:

$ mvn archetype: bumuo ng -DgroupId = com.pangalan ng Kumpanya.helloworld-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =hindi totoo

Dapat itong lumikha ng istraktura ng folder at bumuo ng output na ganito ang hitsura:

[INFO] Pag-scan para sa mga proyekto ...
[INFO]
[INFO] ----------------- -----------------
[INFO] Pagbuo ng Maven Stub Project (Walang POM) 1
[INFO] ----------------- -----------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: bumuo (default-kliyente)> bumuo ng mga mapagkukunan
@ standalone-pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: bumuo (default-ui) @ standalone-pom ---
[INFO] Bumubuo ng proyekto sa Batch mode
[INFO] ----------------- -----------------------------
[INFO] Paggamit ng mga sumusunod na parameter para sa paglikha ng proyekto mula sa Lumang (1.x) Archetype:
maven-archetype-quickstart: 1.0
[INFO] ----------------- -----------------------------
[INFO] Parameter: basedir, Halaga: / Mga Gumagamit / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: package, Halaga: com.companyname.helloworld
[INFO] Parameter: groupId, Halaga: com.companyname.helloworld
[INFO] Parameter: artifactId, Halaga: helloworld
[INFO] Parameter: packageName, Halaga: com.companyname.helloworld
[INFO] Parameter: bersyon, Halaga: 1.0-SNAPSHOT
[INFO] proyekto na nilikha mula sa Lumang (1.x) Archetype in dir: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ----------------- -----------------
[INFO] BUILD SUCCESS
[INFO] ----------------- -----------------
[INFO] Kabuuang oras: 8.602 s
[INFO] Tapos sa: 2018-01-27T00: 05: 37-08: 00
[INFO] Pangwakas na Memorya: 15M / 152M
[INFO] ----------------- -----------------

Ang istraktura ng folder ay dapat magmukhang ganito:

helloworld
|- pom.xml
'- src
|- pangunahing
| '-java
| '- kasama
| '-- pangalan ng Kumpanya
| '- helloworld
| '- App.java
'-pagsusulit
'-java
'- kasama
'-- pangalan ng Kumpanya
'- helloworld
'- AppTest.java

Naglalaman ang pom.xml ng mga configure ng build. Sa loob ng pom.xml ganito ang code:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-instance '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>helloworld>
>garapon>
>1.0-SNAPSHOT>
>helloworld>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>pagsusulit>
>
>
>

Maaari kang makabuo ng file ng garapon gamit ang sumusunod na utos:

$ mvn na pakete

[INFO] Pag-scan para sa mga proyekto ...
[INFO]
[INFO] ----------------- -----------------
[INFO] Pagbuo ng helloworld 1.0-SNAPSHOT
[INFO] ----------------- -----------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: mga mapagkukunan (default-mapagkukunan) @ helloworld ---
[WARNING] Paggamit ng pag-encode ng platform (UTF-8 talaga) upang makopya ang mga na-filter na mapagkukunan, ibig sabihin
ang build ay umaasa sa platform!
[INFO] laktawan ang walang kasalukuyang resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / pangunahing / mapagkukunan
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Nakita ang mga pagbabago - muling pagsasaayos ng module!
[WARNING] Hindi pa naitakda ang pag-encode ng file, gamit ang pag-encode ng platform UTF-8, ibig sabihin, build ay
umaasa sa platform!
[INFO] Pagbuo ng 1 mapagkukunang file sa / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / klase
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResource (default-testResource) @
helloworld ---
[WARNING] Paggamit ng pag-encode ng platform (UTF-8 talaga) upang makopya ang mga na-filter na mapagkukunan, ibig sabihin
ang build ay umaasa sa platform!
[INFO] laktawan ang walang kasalukuyang resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / mapagkukunan
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Nakita ang mga pagbabago - muling pagsasaayos ng module!
[WARNING] Hindi pa naitakda ang pag-encode ng file, gamit ang pag-encode ng platform UTF-8, ibig sabihin, build ay
umaasa sa platform!
[INFO] Pagbuo ng 1 mapagkukunang file sa / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / pagsubok-klase
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: pagsubok (default-test) @ helloworld ---
[INFO] Direktoryo ng ulat ng Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
surefire-ulat

---- -----
T E S T S
---- -----
Pagpapatakbo ng com.companyname.helloworld.AppTest
Tumatakbo ang mga pagsubok: 1, Mga pagkabigo: 0, Mga Error: 0, Nilaktawan: 0, Lumipas ang oras: 0.014 sec

Mga Resulta:

Tumatakbo ang mga pagsubok: 1, Mga pagkabigo: 0, Mga Error: 0, Nilaktawan: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: garapon (default-jar) @ helloworld ---
[INFO] Building jar: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------- -----------------
[INFO] BUILD SUCCESS
[INFO] ----------------- -----------------
[INFO] Kabuuang oras: 5.624 s
[INFO] Tapos sa: 2018-01-27T00: 11: 10-08: 00
[INFO] Pangwakas na Memorya: 16M / 114M
[INFO] ----------------- -----------------

Maaari mong patakbuhin ang jar file na tulad nito:

$ java -cp target / helloworld-1.0-SNAPSHOT.garaponkasama sipangalan ng Kumpanya.helloworld.App
Kamusta Mundo!

Ang file ng garapon ay inilalagay sa target na folder.

Gradle

Pinagsasama ng Gradle ang lakas ng Ant at Maven. Ang unang bersyon ng Gradle ay inilabas noong 2012. Nakita nito ang mabilis na pag-aampon. Kasalukuyang ginagamit ito ng Google para sa Android OS.

Sa halip na XML, ginagamit ng Gradle ang wikang Groovy. Bilang isang resulta, ang mga bumuo ng mga script sa Gradle ay mas madaling isulat at mabasa. Pauna itong gumagamit ng Ivy para sa pamamahala ng pagtitiwala, ngunit gumagamit ito ng sarili nitong dependency engine ngayon.

Mga kalamangan

  • Nagbibigay ng pamantayan habang nananatiling may kakayahang umangkop
  • Madaling basahin at isulat ang mga script ng pagbuo
  • Mas mahusay sa paghawak ng maraming mga bersyon ng mga dependency
  • Nakapangasiwa ng maraming wika at teknolohiya sa pagprograma
  • Ang aktibong pamayanan na tumutulong sa pagbuo ng tool
  • Ginagawa itong Gradle DSL (Tiyak na Wika ng Domain) na simpleng istraktura ng pagsasaayos
  • Nagbibigay ang Gradle ng mga pagpapahusay sa pagganap gamit ang incrementally, build cache at ang Gradle Daemon

Kahinaan

  • Ang pagsasama ng IDE ay hindi kasing ganda ng Maven

Halimbawa ng Gradle

Maaari mong mai-install ang Gradle mula sa dito . Kapag na-set up mo ang Gradle sa iyong landas, maaari mo itong suriin sa pamamagitan ng:

$ gradle--versi

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

Oras ng pagbuo:2018-01-24 17: 04:52UTC
Pagbabago: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Ant: Apache Ant(TM)bersyon 1.9.9 na naipon noong Pebrero2 2017.
JVM: 1.8.0_74(Oracle Corporation25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Susunod, likhain ang sumusunod na istraktura ng direktoryo:

helloworld
| -magtayogradle
'-src
| -pangunahing
'-java
'-helloworld
'-helloworldjava

Para sa helloworld.java ilagay ang code mula sa halimbawa ng Ant. At para sa build.gradle ilagay sa sumusunod na code:

ilapat ang plugin: 'java'

bersyon= '1.0'

mga repository{
mavenCentral()
}

mga pagtitiwala{
testCompile group: 'junit', pangalan: 'junit', bersyon: '4.12'
}

Maaari mong gamitin ang mga gawain sa gradle – lahat ng utos upang tingnan ang lahat ng mga magagamit na utos. Awtomatikong kinukuha ng Gradle ang mga plugin na tinukoy mo sa build.gradle file at ipinapakita sa iyo ang mga karagdagang gawain na magagamit dahil sa mga plugin.

Maaari mong makuha ang pagbuo sa pamamagitan ng pagpapatakbo:

$ gradle jar

TATayo MATAGUMPAY sa 1s
2naaaksyong gawain:2pinatay

Maaari mong patakbuhin ang iyong garapon na tulad nito:

$ java -cp build / libs / helloworld-1.0.garaponhelloworld
Kamusta Mundo!

Ang file ng garapon ay inilalagay sa build / libs folder.

Konklusyon

Kabilang sa mga tool sa pagbuo, ang Ant ay maaaring maging kapaki-pakinabang para sa mas maliit na mga proyekto habang ang Maven ay mas mahusay para sa pagtiyak na ang lahat ng mga tagabuo ay sumusunod sa parehong mga patakaran. Ang Gradle ay ang pinakabagong tool na nagbibigay ng pinaka kakayahang umangkop.

Mga Sanggunian: