Pareizā veidošanas rīka izvēle: Ant vs Maven vs Gradle
Programmatūras izstrādes laikā izstrādātājiem atkal un atkal jāatjauno 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ūvju automatizācijai. Galvenie veidošanas rīki ir:
- Apache Skudra ar Ivy
- Maven
- Gradle
Izpētīsim rīkus, lai uzzinātu vairāk.
Apache Skudra ar Ivy
Apache Ant ir Java balstīts komandrindas rīks, kas XML failus izmanto, lai definētu būvēšanas skriptus. To galvenokārt izmanto Java būvējumos, bet to var izmantot arī C / C ++ izstrādei. Iebūvētie uzdevumi nodrošina veidus, kā apkopot, apkopot, pārbaudīt un palaist lietojumprogrammas. Lietotāji var arī izveidot paši 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. Skudru attīstība sākās 2000. gadā.
Plusi
- Labāka kontrole pār kopējo veidošanas procesu
- Pietiekami elastīgs, lai strādātu ar jebkuru darba procesu
Cons
- Uz XML bāzes veidošanas faili var izaugt lieli un neuzturami
- Veidošanas skriptu uzturēšanai nepieciešams daudz laika un resursu
- IDE integrāciju ir grūti panākt
Skudra ar Ivy piemēru
Šeit varat instalēt jaunāko Ant. Jums ir jālejupielādē zip, jāizvērš un jāievieto mape bin jūsu ceļā. Lai pārbaudītu, vai Ant ir pareizi instalēts, varat izmantot šo komandu:
$ ant -versijaApache Ant (TM) 1. versija.10.1 sastādīts 2017. gada 2. februārī
Kad esat instalējis Ant, varat lejupielādēt jaunāko Ivy jar un ievietot to lib mapē Ant direktorijā.
Pēc Ant instalēšanas izveidojiet mapes helloworld un helloworld / src. Ievietojiet src mapē src.java fails ar kodu:
/ ***************************Izdrukā "Sveika pasaule!"
**************************** /
sabiedrības klases kolēģis
public static void main (String [] args)
Sistēma.ārā.println ("Sveika pasaule!");
Tagad mapē helloworld izveidojiet būvējumu.xml fails ar šādu kodu:
Tajā pašā kolēģu mapē izveidojiet efejas.xml fails ar šādu kodu:
Direktoriju struktūrai vajadzētu izskatīties šādi:
Sveika pasaule| - veidot.xml
| - efeja.xml
'- src
'-- Sveika pasaule.java
Tagad jūs varat palaist būvniecību ar komandu:
$ skudras burkaVeiksmīgai būvēšanai jānodrošina šāda izeja:
$ skudras burkaBuildfile: / Lietotāji / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
atrisināt:
[efeja: izgūt] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / efeja / ::
[ivy: retrieve] :: ielādes iestatījumi :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-skudra-1.10.1 / lib / efeja-2.4.0.burka!/ org / apache / ivy / core / settings / ivysettings.xml
[efeja: izgūt] :: atkarību atrisināšana :: org.apache # helloworld; [aizsargāts pa e-pastu]
MacBook-Air.vietējais
[efeja: izgūt] konf.: [noklusējums]
[efeja: izgūt] atrada junit # junit; 4.12 publiski
[efeja: izgūt] atrasta org.hamcrest # hamcrest-core; 1.3 publiski
[efeja: izgūt] :: izšķirtspējas ziņojums :: atrisināt 397 ms :: artefakti dl 15 ms
---------------------------------------------------------------------
| | moduļi || artefakti |
| konf | numurs | meklēt | atcelt | izlikts || numurs | pazemināts |
---------------------------------------------------------------------
| noklusējums | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[efeja: ielādēt] :: izgūst :: org.apache # kolēģis
[efeja: izgūt] konf.: [noklusējums]
[efeja: izgūt] 0 artefakti nokopēti, 4 jau izgūti (0 KB / 39 ms)
sastādīt:
[mkdir] Izveidots dir: / Lietotāji / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
klases
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: brīdinājums:
'includeeantruntime' netika iestatīts, pēc noklusējuma tiek veidots.sysclasspath = pēdējais; iestatīts uz nepatiesu
atkārtojamām būvēm
[javac] 1 avota faila apkopošana vietnē / Users / zak / _work / LearnBuildScripts / LearnANT /
kolēģu pasaule / būvēt / klases
burka:
[mkdir] Izveidots dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Celtniecības trauks: / Lietotāji / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Sveika pasaule.burka
VEICIET veiksmīgi
Kopējais laiks: 6 sekundes
Jūs varat izmēģināt jar failu šādi:
$ java -cp build / bin / helloworld.burku kolēģisSveika pasaule!
Mēs esam definējuši jar failu, kas jāievieto mapē build / bin. Veidošanas laikā mapes tiek izveidotas. Skudru burciņu komanda būvē izsauc burkas mērķi.xml.
Maven
Maven tika izstrādāts, lai atrisinātu problēmas, ar kurām saskaras skudru bāzes skripti. Tā glabāja XML failus, taču organizācijai bija atšķirīga pieeja. In Ant, izstrādātājiem ir jāizveido visi uzdevumi. Maven samazina uzdevumu izveidi, ieviešot stingrākus kodu organizēšanas standartus. Tā rezultātā ir vieglāk sākt darbu ar standarta projektiem.
Tas arī ieviesa atkarības lejupielādes, kas atviegloja attīstību. Pirms Ivy ieviešanas Ant, lietotājiem bija jāpārvalda atkarības lokāli. Maven vispirms pieņēma atkarības pārvaldības filozofiju.
Tomēr Mavens stingrie standarti apgrūtina pielāgotu veidošanas skriptu rakstīšanu. Ar rīku ir viegli strādāt, ja vien projekts ievēro stingros standartus.
Plusi
- Automātiskas atkarības lejupielādes
- Visas atkarības tiek automātiski ierakstītas avota kontrolē kā daļa no Maven skriptiem
- Standartizē un vienkāršo veidošanas procesu
- Viegli integrējama ar IDE un CI / CD sistēmām
Cons
- Nav elastīgi, veidojot pielāgotas darbplūsmas
- Stāvā mācīšanās līkne, un procesu iesācējiem ir grūti saprast
- Laikietilpīgs, lai atrisinātu būvniecības problēmas un jaunas bibliotēkas integrācijas
- Nav labi ar vairākām vienas atkarības versijām
Maven piemērs
Šeit varat lejupielādēt jaunāko Maven. Instalāciju varat pārbaudīt šādi:
$ mvn - versijaApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maven mājas: / Lietotāji / zak / BuildTools / Maven / apache-maven-3.5.2
Java versija: 1.8.0_74, pārdevējs: Oracle Corporation
Java mājas lapa: / 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 ", saime:" mac "
Izveidojiet mapi Helloworld un ģenerējiet projektu ar šādu komandu:
$ mvn arhetips: ģenerēt -DgroupId = com.Kompānijas nosaukums.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = nepatiesa
Tam vajadzētu izveidot mapes struktūru un ģenerēt izvadi, kas izskatās šādi:
[INFO] Notiek projektu meklēšana ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Maven Stub projekta veidošana (bez POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> spraudnis maven-archetype: 3.0.0: ģenerēt (noklusējums-cli)> ģenerēt-avotus
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- spraudnis maven-archetype: 3.0.0: ģenerēt (noklusējums-cli) @ standalone-pom ---
[INFO] Projekta ģenerēšana pakešrežīmā
[INFO] ----------------------------------------------------------------------------
[INFO] Projekta izveidošanai no Old (1.x) Arhetips:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parametrs: basedir, vērtība: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parametrs: pakete, vērtība: kom.Kompānijas nosaukums.Sveika pasaule
[INFO] Parametrs: groupId, vērtība: kom.Kompānijas nosaukums.Sveika pasaule
[INFORMĀCIJA] Parametrs: artifactId, vērtība: helloworld
[INFO] Parametrs: packageName, Value: com.Kompānijas nosaukums.Sveika pasaule
[INFO] Parametrs: versija, vērtība: 1.0-SNAPSHOT
[INFO] projekts izveidots no Old (1.x) Arhetips direktorijā: / Lietotāji / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFORMĀCIJA] VEICIET panākumus
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks: 8.602 s
[INFO] Pabeigts: 2018-01-27T00: 05: 37-08: 00
[INFO] Galīgā atmiņa: 15M / 152M
[INFO] ------------------------------------------------------------------------
Mapju struktūrai vajadzētu izskatīties šādi:
Sveika pasaule| - pom.xml
'- src
| - galvenais
| '- java
| '- com
| '-- Kompānijas nosaukums
| '-- Sveika pasaule
| "- App.java
'-- pārbaude
'- java
'- com
'-- Kompānijas nosaukums
'-- Sveika pasaule
'- AppTest.java
Pom.xml satur būvēšanas konfigurācijas. Iekšpusē pom.xml kods izskatās šādi:
_0.xsd ">
Burka failu var ģenerēt, izmantojot šādu komandu:
$ mvn pakete[INFO] Notiek projektu meklēšana ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFORMĀCIJA] Apkārtējās pasaules celtniecība 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- spraudnis maven-resources: 2.6: resursi (noklusējuma resursi) @ helloworld ---
[BRĪDINĀJUMS] Izmantojot platformas kodēšanu (faktiski UTF-8) filtrētu resursu kopēšanai, t.e.
būvējums ir atkarīgs no platformas!
[INFO] izlaist neesošu resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- spraudnis maven-compiler: 3.1: kompilēt (noklusējuma sastādīt) @ helloworld ---
[INFO] Noteiktas izmaiņas - moduļa atkārtota kompilēšana!
[BRĪDINĀJUMS] Failu kodēšana nav iestatīta, izmantojot platformas kodējumu UTF-8, t.e. būvēt ir
atkarīga no platformas!
[INFO] 1 avota faila sastādīšana mapē / Users / zak / _work / LearnBuildScripts / LearnMaven /
kolēģis / mērķis / klases
[INFO]
[INFO] --- spraudnis maven-resources: 2.6: testResources (noklusējuma-testResources) @
Sveika pasaule ---
[BRĪDINĀJUMS] Izmantojot platformas kodēšanu (faktiski UTF-8) filtrētu resursu kopēšanai, t.e.
būvējums ir atkarīgs no platformas!
[INFO] izlaist neesošu resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resursi
[INFO]
[INFO] --- spraudnis maven-compiler: 3.1: testCompile (noklusējuma testCompile) @ helloworld ---
[INFO] Noteiktas izmaiņas - moduļa atkārtota kompilēšana!
[BRĪDINĀJUMS] Failu kodēšana nav iestatīta, izmantojot platformas kodējumu UTF-8, t.e. būvēt ir
atkarīgs no platformas!
[INFO] 1 avota faila sastādīšana mapē / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-klases
[INFO]
[INFO] --- spraudnis maven-surefire: 2.12.4: tests (noklusējuma tests) @ helloworld ---
[INFO] Surefire ziņojumu katalogs: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Skriešana com.Kompānijas nosaukums.Sveika pasaule.AppTest
Testi veikti: 1, Kļūdas: 0, Kļūdas: 0, Izlaists: 0, Pagājušais laiks: 0.014 sek
Rezultāti:
Testi veikti: 1, Kļūdas: 0, Kļūdas: 0, Izlaisti: 0
[INFO]
[INFO] --- spraudnis maven-jar-spraudnis: 2.4: burka (noklusējuma burka) @ helloworld ---
[INFO] Celtniecības trauks: / Lietotāji / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
kolēģis-1.0-SNAPSHOT.burka
[INFO] ------------------------------------------------------------------------
[INFORMĀCIJA] VEICIET panākumus
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks: 5.624 s
[INFO] Pabeigts: 2018-01-27T00: 11: 10-08: 00
[INFO] Galīgā atmiņa: 16M / 114M
[INFO] ------------------------------------------------------------------------
Burka failu var palaist šādi:
$ java -cp target / helloworld-1.0-SNAPSHOT.jar com.Kompānijas nosaukums.Sveika pasaule.AppSveika pasaule!
Burka fails tiek ievietots mērķa mapē.
Gradle
Gradle apvieno Ant un Maven spēku. Pirmā Gradle versija tika izlaista 2012. gadā. Tā ir ātri pieņemta. Pašlaik Google to izmanto operētājsistēmai Android OS.
XML vietā Gradle izmanto Groovy valodu. Tā rezultātā Gradle veidot skriptus ir vieglāk rakstīt un lasīt. Sākotnēji tas izmantoja Ivy atkarības pārvaldībai, bet tagad izmanto savu atkarības dzinēju.
Plusi
- Nodrošina standartizāciju, vienlaikus saglabājot elastību
- Viegli lasāmi un rakstāmi veidošanas skripti
- Labāk rīkoties ar vairākām atkarību versijām
- Spēj rīkoties ar vairākām programmēšanas valodām un tehnoloģijām
- Aktīva sabiedrība palīdz izstrādāt rīku
- Gradle DSL (domēna specifiskā valoda) padara to vienkāršu konfigurācijas struktūru
- Gradle nodrošina veiktspējas uzlabojumus, izmantojot pakāpeniski, build cache un Gradle Daemon
Cons
- IDE integrācija nav tik laba kā Maven
Gradle piemērs
Jūs varat instalēt Gradle šeit. Kad esat iestatījis Gradle savā ceļā, varat to pārbaudīt:
$ gradle --versija------------------------------------------------------------
4. pakāpiens.5
------------------------------------------------------------
Izveides laiks: 2018-01-24 17:04:52 UTC
Pārskatīšana: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Skudra: Apache Ant (TM) versija 1.9.9 sastādīts 2017. gada 2. februārī
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Pēc tam izveidojiet šādu direktorijas struktūru:
Sveika pasaule| - veidot.gradle
'- src
| - galvenais
'- java
'-- Sveika pasaule
'-- Sveika pasaule.java
Kolēģim.java ielika kodu no Ant piemēra. Un būvniecībai.gradle ievietojiet šādu kodu:
piemērot spraudni: 'java'versija = '1.0 '
krātuves
mavenCentral ()
atkarības
testCompile grupa: 'junit', nosaukums: 'junit', versija: '4.12 '
Varat izmantot komandu “gradle task-all”, lai apskatītu visas pieejamās komandas. Gradle automātiski uzņem spraudņus, kurus norādījāt būvējumā.gradle failu un parāda papildu uzdevumus, kas pieejami spraudņu dēļ.
Veidojumu var iegūt, palaižot:
$ gradle jarVEICIET veiksmīgi 1 sekunžu laikā
2 veicami uzdevumi: 2 izpildīti
Jūs varat palaist savu burku šādi:
$ java -cp build / libs / helloworld-1.0.burku kolēģisSveika pasaule!
Burka fails tiek ievietots mapē build / libs.
Secinājums
Starp veidoš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 vienus un tos pašus noteikumus. Gradle ir jaunākais rīks, kas nodrošina vislielāko elastību.
Atsauces:
- http: // skudra.apache.org /
- http: // skudra.apache.org / efeja /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-example
- https: // piemēri.javacodegeeks.com / core-java / gradle / gradle-sveiki-pasaule-apmācība /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / guides / sākšana / izkopšana piecās minūtēs.html
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // tehnoloģiju sarunas.com / 2014/06/18 / celtniecības rīki /
- https: // www.kvora.lv / Kas-ir-Maven-pret-Ant-par-plusus un mīnusus kā Java rīku veidošanas rīkus