Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Programmatūras izstrādes laikā izstrādātājiem atkal un atkal jāpārveido viens un tas pats kods. Viņi bieži mēģina izmantot bash skriptus vai citas skriptu valodas, lai automatizētu uzdevumu. Tomēr ir pieejami būvēšanas rīki, kas ir piemērotāki būvniecības automatizācijai. Galvenie būvniecības rīki ir:

Izpētīsim rīkus, lai uzzinātu vairāk.







Apache Ant ar Ivy

Apache Ant ir uz Java balstīts komandrindas rīks, kas veidošanas skriptu definēšanai izmanto XML failus. To galvenokārt izmanto Java būvējumiem, bet to var izmantot arī C/C ++ izstrādei. Iebūvētie uzdevumi nodrošina veidus, kā apkopot, salikt, pārbaudīt un palaist programmatūras lietojumprogrammas. Lietotāji var arī izveidot savus antlibus, lai uzlabotu Ant funkcionalitāti. Apache Ivy ir atkarības pārvaldības rīks, kas viegli integrējas ar Ant, lai nodrošinātu stabilāku ekosistēmu. Ant attīstība sākās 2000. gadā.



Pros



  • Labāka kontrole pār visu veidošanas procesu
  • Pietiekami elastīgs, lai strādātu ar jebkuru darba procesu

Mīnusi





  • Uz XML balstīti būvēšanas faili var kļūt lieli un neuzturami
  • Būvēšanas skriptu uzturēšanai ir nepieciešams daudz laika un resursu
  • IDE integrāciju ir grūti panākt

Skudra ar efeju Piemērs

Jūs varat instalēt jaunāko Ant no šeit . Jums ir jālejupielādē zip, jāizvērš un jāievieto atkritumu mape savā ceļā. Lai pārbaudītu, vai Ant ir pareizi instalēts, varat izmantot šo komandu:

$ ant-versija
Apache Ant(TM)versija 1.10.1, kas apkopota februārī2 2017. gads.

Kad esat instalējis Ant, jūs varat lejupielādēt jaunāko Ivy burku un ievietot to mapē Lib, kas atrodas Ant direktorijā.



Kad esat instalējis Ant, izveidojiet mapes helloworld un helloworld/src. Src mapē ievietojiet failu helloworld.java ar kodu:

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

Izdrukā 'Hello World!'

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

publiski klaseSveika pasaule{

publiski statisks spēkā neesošsgalvenais( Stīga []args) {
Sistēma .ārā.println('Sveika pasaule!');
}

}

Tagad mapē helloworld izveidojiet failu build.xml ar šādu kodu:

xmlns: efeja='antlib: org.apache.ivy.ant' vārds='Sveika pasaule' noklusējuma='burka'>

vārds='src.dir' vērtību='src'/>
vārds='build.dir' vērtību='būvēt'/>
vārds='klases.dir' vērtību='$ {build.dir}/klases'/>
vārds='am.dir' vērtību='$ {build.dir} / bin'/>
vārds='lib.dir' vērtību='lib' />
id='lib.path.id'>
tev='$ {lib.dir}' />
>

vārds='atrisināt'>
/>
>

vārds='tīrs'>
tev='$ {build.dir}'/>
>

vārds='sastādīt' atkarīgs='atrisināt'>
tev='$ {class.dir}'/>
srcdir='$ {src.dir}' destdir='$ {class.dir}' classpathref='lib.path.id'/>
>

vārds='burka' atkarīgs='sastādīt'>
tev='$ {bin.dir}'/>
iznīcināt='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {class.dir}'/>
>

>

Tajā pašā helloworld mapē izveidojiet failu ivy.xml ar šādu kodu:

versija=“2.0”>
organizācija='org.apache' modulis='Sveika pasaule'/>
>
org='junit' vārds='junit' rev='4.12'/>
>
>

Direktorija struktūrai vajadzētu izskatīties šādi:

Sveika pasaule
|- build.xml
| - efeja.xml
`- src
`- helloworld.java

Tagad jūs varat palaist būvniecību ar komandu:

$skudraburka

Veiksmīgai būvēšanai vajadzētu nodrošināt šādu izvadi:

$ skudru burka
Būvējuma fails: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

atrisināt:
[efeja: ielādēt] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[efeja: ielādēt] :: ielādes iestatījumi :: 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
[efeja: ielādēt] :: atkarību atrisināšana :: org.apache#helloworld; [e -pasts aizsargāts]
MacBook-Air.local
[efeja: ielādēt] confs: [noklusējums]
[efeja: ielādēt] publiski atrada junit#junit; 4.12
[efeja: ielādēt] atrada org.hamcrest#hamcrest-core; 1.3 publiski
[efeja: ielādēt] :: rezolūcijas ziņojums :: atrisināt 397 ms :: artefakti dl 15 ms
-------------------------------------------------- -------------------
| | moduļi || artefakti |
| conf | numurs | meklēt | nomākts | izlikts || numurs | nomākts |
-------------------------------------------------- -------------------
| noklusējuma | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[efeja: ielādēt] :: ielādēt :: org.apache#helloworld
[efeja: ielādēt] confs: [noklusējums]
[efeja: ielādēt] Nokopēti 0 artefakti, 4 jau iegūti (0 KB/39 ms)

sastādīt:
[mkdir] Izveidots dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klases
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: brīdinājums:
'includeantruntime' nebija iestatīts, noklusējuma vērtība bija build.sysclasspath = last; iestatīts uz nepatiesu
atkārtojamām konstrukcijām
[javac] 1 avota faila apkopošana mapē/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/nodarbības

burka:
[mkdir] Izveidots dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Ēkas burka:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

BUILD VEIKSMĪGI
Kopējais laiks: 6 sekundes

Jūs varat izmēģināt jar failu šādi:

$ java -cp build/bin/helloworld.burkaSveika pasaule
Sveika pasaule!

Mēs esam definējuši jar failu, kas jāievieto mapē build/bin. Mapes tiek izveidotas būvniecības laikā. Komanda skudru burka izsauc burka mērķi failā build.xml.

Maven

Maven tika izstrādāts, lai atrisinātu problēmas, kas saistītas ar skriptu skriptu veidošanu. Tā saglabāja XML failus, bet organizācijai pieņēma atšķirīgu pieeju. Programmā Ant izstrādātājiem ir jāizveido visi uzdevumi. Maven samazina uzdevuma izveidi, ieviešot stingrākus koda organizēšanas standartus. Rezultātā ir vieglāk sākt strādāt ar standarta projektiem.

Tā arī ieviesa atkarības lejupielādi, kas atviegloja attīstību. Pirms Ivy ieviešanas Ant, lietotājiem bija jāpārvalda atkarības lokāli. Mavens vispirms pieņēma atkarības pārvaldības filozofiju.

Tomēr Mavens stingrie standarti apgrūtina pielāgotu veidošanas skriptu rakstīšanu. Ar šo rīku ir viegli strādāt, ja vien projekts atbilst stingriem standartiem.

Pros

  • Automātiska atkarības lejupielāde
  • Visas atkarības tiek automātiski ierakstītas avota vadībā kā daļa no Maven skriptiem
  • Standartizē un vienkāršo veidošanas procesu
  • Viegli integrējams ar IDE un CI/CD sistēmām

Mīnusi

  • Nav elastīgs, veidojot pielāgotas darbplūsmas
  • Stāva mācīšanās līkne un process iesācējiem ir grūti saprotams
  • Būvniecības problēmu un jaunu bibliotēku integrāciju risināšana prasa daudz laika
  • Nav labi ar vairākām vienas un tās pašas atkarības versijām

Maven piemērs

Jūs varat lejupielādēt jaunāko Maven no šeit . Instalāciju var pārbaudīt šādi:

$ mvn -versija
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017. gads.-10-18T00:58:13-07: 00)
Maven sākums: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java versija: 1.8.0_74, pārdevējs: Oracle Corporation
Java sākumlapa: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Saturs/Sākums/jre
Noklusējuma lokalizācija: en_US, platformas kodējums: UTF-8
OS nosaukums:'mac os x', versija:“10.11,6”, arka:'x86_64', ģimene:'mac'

Izveidojiet mapi helloworld un ģenerējiet projektu ar šādu komandu:

$ mvn arhetips: ģenerēt -DgroupId = com.Kompānijas nosaukums.Sveika pasaule-DartifactId = sveika pasaule
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =nepatiesa

Tam vajadzētu izveidot mapju struktūru un ģenerēt izvadi, kas izskatās šādi:

[INFO] Projektu meklēšana ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: create (default-cli)> create-sources
@ 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: ģenerēt (noklusējuma cli) @ standalone-pom ---
[INFO] Projekta ģenerēšana partijas režīmā
[INFO] ----------------------------------------------- -----------------------------
[INFO] Izmantojot šādus parametrus, lai izveidotu projektu no vecā (1.x) arhetipa:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametrs: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametrs: pakete, vērtība: com.comuzņēmuma nosaukums.helloworld
[INFO] Parametrs: groupId, Value: com.comuzņēmuma nosaukums.helloworld
[INFO] Parametrs: artifactId, Value: helloworld
[INFO] Parametrs: packageName, Value: com.comuzņēmuma nosaukums.helloworld
[INFO] Parametrs: versija, vērtība: 1.0-SNAPSHOT
[INFO] projekts izveidots no vecā (1.x) arhetipa režijā:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFORMĀCIJA] BUILD PUCCESS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kopējais laiks: 8,602 s
[INFO] Pabeigts: 2018-01-27T00: 05: 37-08: 00
[INFO] Pēdējā atmiņa: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Mapes struktūrai vajadzētu izskatīties šādi:

Sveika pasaule
|- pom.xml
``- src
|- galvenais
| ``-java
| ``- ar
| ``-- Kompānijas nosaukums
| ``-- Sveika pasaule
| ``- Lietotne.java
``-pārbaude
``-java
``- ar
``-- Kompānijas nosaukums
``-- Sveika pasaule
``- AppTest.java

Pom.xml satur būvēšanas konfigurācijas. Pom.xml iekšpusē kods izskatās šādi:

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.comuzņēmuma nosaukums.helloworld>
>Sveika pasaule>
>burka>
>1.0-SNAPSHOT>
>Sveika pasaule>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>pārbaude>
>
>
>

Jar failu var ģenerēt, izmantojot šādu komandu:

$ mvn pakete

[INFO] Projektu meklēšana ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Helloworld ēka 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resursi (noklusējuma resursi) @ helloworld ---
[BRĪDINĀJUMS] Izmantojot platformas kodējumu (faktiski UTF-8), lai kopētu filtrētos resursus, t.i.
uzbūve ir atkarīga no platformas!
[INFO] izlaist neesošu resursuDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFORMĀCIJA] --- maven-kompilatora spraudnis: 3.1: apkopot (noklusējuma apkopot) @ helloworld ---
[INFO] Konstatētas izmaiņas - moduļa pārkompilācija!
[BRĪDINĀJUMS] Failu kodējums nav iestatīts, izmantojot platformas kodējumu UTF-8, t.i., būve ir
atkarīgs no platformas!
[INFO] 1 avota faila apkopošana mapē/Users/zak/_work/LearnBuildScripts/LearnMaven/
sveika pasaule/mērķis/klases
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Sveika pasaule ---
[BRĪDINĀJUMS] Izmantojot platformas kodējumu (faktiski UTF-8), lai kopētu filtrētos resursus, t.i.
uzbūve ir atkarīga no platformas!
[INFO] izlaist neesošu resursuDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-kompilatora spraudnis: 3.1: testCompile (noklusējuma testCompile) @ helloworld ---
[INFO] Konstatētas izmaiņas - moduļa pārkompilācija!
[BRĪDINĀJUMS] Failu kodējums nav iestatīts, izmantojot platformas kodējumu UTF-8, t.i., būve ir
atkarīgs no platformas!
[INFO] 1 avota faila apkopošana mapē/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/testa klases
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (noklusējuma tests) @ helloworld ---
[INFO] Surefire pārskatu katalogs:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
droši ziņojumi

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Tiek palaists vietne com.comfanyname.helloworld.AppTest
Pārbaudes: 1, neveiksmes: 0, kļūdas: 0, izlaistas: 0, pagājis laiks: 0,014 sek

Rezultāti:

Testi tiek veikti: 1, neveiksmes: 0, kļūdas: 0, izlaistas: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (noklusējuma jar) @ helloworld ---
[INFO] Ēkas burka:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFORMĀCIJA] BUILD PUCCESS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kopējais laiks: 5,624 s
[INFO] Pabeigts: 2018-01-27T00: 11: 10-08: 00
[INFO] Pēdējā atmiņa: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Jūs varat palaist jar failu šādi:

$ java -cp target/helloworld-1.0-SNAPSHOT.burkaar.Kompānijas nosaukums.Sveika pasaule.Lietotne
Sveika pasaule!

Burkas fails tiek ievietots mērķa mapē.

Gradle

Gradle apvieno Ant un Maven spēku. Pirmā Gradle versija tika izlaista 2012. gadā. Tā tika ātri pieņemta. Google to pašlaik izmanto operētājsistēmai Android OS.

XML vietā Gradle izmanto Groovy valodu. Tā rezultātā veidot skriptus programmā Gradle ir vieglāk rakstīt un lasīt. Sākotnēji tas izmantoja Ivy atkarību pārvaldībai, bet tagad izmanto savu atkarības dzinēju.

Pros

  • Nodrošina standartizāciju, vienlaikus saglabājot elastību
  • Viegli lasīt un rakstīt veidošanas skriptus
  • Labāk apstrādā vairākas atkarību versijas
  • Spēj pārvaldīt vairākas programmēšanas valodas un tehnoloģijas
  • Aktīva sabiedrība palīdz izstrādāt rīku
  • Gradle DSL (domēnam raksturīga valoda) padara to vienkāršu konfigurācijas struktūru
  • Gradle nodrošina veiktspējas uzlabojumus, pakāpeniski izmantojot kešatmiņu un Gradle dēmonu

Mīnusi

  • IDE integrācija nav tik laba kā Maven

Gradle piemērs

Jūs varat instalēt Gradle no šeit . Kad esat iestatījis Gradle savā ceļā, varat to pārbaudīt, veicot tālāk norādītās darbības.

$ gradle--versija

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

Būvēšanas laiks:2018. gads-01-24 17: 04:52UTC
Pārskatīšana: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Skudra: Apache Ant(TM)versija 1.9.9, kas apkopota februārī2 2017. gads.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64

Pēc tam izveidojiet šādu direktoriju struktūru:

Sveika pasaule
| -būvēt.gradle
``-src
| -galvenais
``-java
``-Sveika pasaule
``-Sveika pasaule.java

Par helloworld.java ielieciet kodu no Ant piemēra. Un build.gradle ievadiet šādu kodu:

lietot spraudni: 'java'

versija= '1.0'

krātuves{
mavenCentral()
}

atkarības{
testCompile grupa: 'junit', vārds: 'junit', versija: '4.12'
}

Varat izmantot pakāpes uzdevumus - visu komandu, lai apskatītu visas pieejamās komandas. Gradle automātiski paņem failā build.gradle norādītos spraudņus un parāda papildu uzdevumus, kas ir pieejami spraudņu dēļ.

Būvējumu var iegūt, palaižot:

$ gradle burka

BŪVĒT VEIKSMĪGI 1 s laikā
2veicami uzdevumi:2izpildīts

Jūs varat palaist burku šādi:

$ java -cp build/libs/helloworld-1.0.burkaSveika pasaule
Sveika pasaule!

Burkas fails tiek ievietots mapē build/libs.

Secinājums

Starp būvēšanas rīkiem Ant var būt noderīgs mazākiem projektiem, savukārt Maven ir labāks, lai pārliecinātos, ka visi izstrādātāji ievēro vienādus noteikumus. Gradle ir jaunākais rīks, kas nodrošina vislielāko elastību.

Atsauces: