Õige ehitustööriista valimine: Ant vs Maven vs Gradle
Tarkvaraarenduse käigus peavad arendajad sama koodi ikka ja jälle üles ehitama. Sageli üritatakse ülesande automatiseerimiseks kasutada bashi skripte või muid skriptikeeli. Siiski on saadaval ehitustööriistu, mis on sobilikumad ehituse automatiseerimiseks. Valdavad ehitustööriistad on:
- Apache Ant koos Ivyga
- Maven
- Gradle
Uurime tööriistu, et rohkem teada saada.
Apache Ant koos Ivyga
Apache Ant on Java-põhine käsurea tööriist, mis kasutab XML-faile ehituskriptide määratlemiseks. Seda kasutatakse peamiselt Java järkude jaoks, kuid seda saab kasutada ka C / C ++ arendamiseks. Sisseehitatud ülesanded pakuvad võimalusi tarkvararakenduste kompileerimiseks, kokkupanekuks, testimiseks ja käitamiseks. Kasutajad saavad Ant'i funktsionaalsuse parandamiseks luua ka oma antlibid. Apache Ivy on sõltuvuse haldamise tööriist, mis integreerub hõlpsasti Antiga, et tagada tugevam ökosüsteem. Sipelga arendamine algas 2000. aastal.
Plussid
- Parem kontroll kogu koostamisprotsessi üle
- Piisavalt paindlik, et töötada mis tahes tööprotsessiga
Miinused
- XML-põhised ehitusfailid võivad kasvada suureks ja hooldamatuks
- Ehituskriptide hooldamiseks on vaja palju aega ja ressursse
- IDE-integreerimist on raske saavutada
Sipelgas koos luuderohu näitel
Siit saate installida uusima Ant. Peate ZIP-faili alla laadima, laiendama ja prügikasti kausta oma teele panema. Järgmise käsu abil saate kontrollida, kas Ant on õigesti installitud:
$ ant -versioonApache Ant (TM) versioon 1.10.1 koostatud 2. veebruaril 2017
Kui Ant on installitud, saate alla laadida uusima Ivy purgi ja panna selle kataloogi Ant kausta lib.
Kui Ant on installitud, looge kaustad helloworld ja helloworld / src. Pange src kausta sisse helloworld.java fail koodiga:
/ ***************************Prindib välja "Tere maailm!"
**************************** /
rahvaklassi kaasmaalane
public staatiline void main (String [] args)
Süsteem.välja.println ("Tere maailm!");
Nüüd looge helloworldi kaustas järk.xml-fail järgmise koodiga:
Ja loo samasse kaasmaailma kausta luuderohi.xml-fail järgmise koodiga:
Kataloogistruktuur peaks välja nägema selline:
Tere, Maailm| - ehitada.xml
| - luuderohi.xml
'- src
'-- Tere, Maailm.java
Nüüd saate ehitada käivitada käsuga:
$ ant purkEdukas järk peaks pakkuma sellist väljundit:
$ ant purkBuildfile: / Kasutajad / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
lahendama:
[ivy: tooma] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / ivy / ::
[ivy: retrieve] :: seadete laadimine :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.purk!/ org / apache / ivy / core / settings / ivysettings.xml
[ivy: tooma] :: sõltuvuste lahendamine :: org.apache # helloworld; [meiliga kaitstud]
MacBook-Air.kohalik
[ivy: retrieve] confs: [vaikimisi]
[ivy: tooma] leitud junit # junit; 4.12 avalikult
[ivy: tooma] leitud org.hamcrest # hamcrest-core; 1.3 avalikult
[ivy: tooma] :: lahenduse aruanne :: resoluut 397 ms :: artefaktid dl 15 ms
---------------------------------------------------------------------
| | moodulid || esemed |
| konf | number | otsima | eemaldatud | välja tõstetud || number | dwnlded |
---------------------------------------------------------------------
| vaikimisi | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy: tooma] :: tooma :: org.apache # kaasmaailm
[ivy: retrieve] confs: [vaikimisi]
[ivy: retrieve] 0 artefakti kopeeritud, 4 juba kätte (0kB / 39ms)
koostama:
[mkdir] Loodud kataloog: / Kasutajad / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
klassides
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: hoiatus:
'includeeantruntime' ei olnud määratud, vaikimisi ehitati.sysclasspath = viimane; seatud valeks
korduvate järkude jaoks
[javac] 1 lähtefaili koostamine kataloogi / Users / zak / _work / LearnBuildScripts / LearnANT /
kaasmaailm / ehitada / klassid
purk:
[mkdir] Loodud kataloog: / Kasutajad / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[purk] Ehituskarp: / Kasutajad / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Tere, Maailm.purk
EHITADA EDUKAT
Kogu aeg: 6 sekundit
Purgifaili saate proovida järgmiselt:
$ java -cp build / bin / helloworld.purgikaaslaneTere, Maailm!
Oleme määratlenud jar-faili, mis pannakse kausta build / bin. Kaustad luuakse ehitamise ajal. Sipelgapurgi käsk kutsub järk-järgult purgi sihtmärgi.xml.
Maven
Maven töötati välja Ant-põhise skriptimisega seotud probleemide lahendamiseks. See säilitas XML-failid, kuid kasutas korraldamisel teistsugust lähenemist. Antis peavad arendajad looma kõik ülesanded. Maven vähendab ülesande loomist, rakendades koodide korraldamiseks tugevamaid standardeid. Selle tulemusena on lihtsam alustada standardprojektidega.
Samuti tutvustas see sõltuvuse allalaadimist, mis muutis arendamise lihtsamaks. Enne Ivy kasutuselevõttu Antis pidid kasutajad sõltuvusi kohalikult haldama. Maven võttis kõigepealt kasutusele sõltuvuse juhtimise filosoofia.
Kuid Mavensi ranged standardid muudavad kohandatud ehituse skriptide kirjutamise keeruliseks. Tööriistaga on lihtne töötada, kui projekt järgib rangeid standardeid.
Plussid
- Automaatsed sõltuvuse allalaadimised
- Kõik sõltuvused salvestatakse automaatselt allika juhtimisel Maveni skriptide osana
- Standardiseerib ja lihtsustab koostamisprotsessi
- Integreerub hõlpsalt IDE-de ja CI / CD-süsteemidega
Miinused
- Pole paindlik kohandatud töövoogude loomisel
- Järsk õppimiskõver ja protsessi on algajatel raske mõista
- Ehitamisprobleemide ja uute teekide integreerimiste lahendamine võtab aega
- Pole hea sama sõltuvuse mitme versiooniga
Maven Näide
Uusima Maveni saate alla laadida siit. Installimist saate kontrollida järgmiselt:
$ mvn --versioonApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maveni kodu: / Kasutajad / zak / BuildTools / Maven / apache-maven-3.5.2
Java versioon: 1.8.0_74, müüja: Oracle Corporation
Java kodu: / Raamatukogu / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Sisukord / Avaleht / jre
Vaikimisi lokaat: en_US, platvormi kodeering: UTF-8
Operatsioonisüsteemi nimi: "mac os x", versioon: "10.11.6 ", kaar:" x86_64 ", perekond:" mac "
Looge kausta helloworld ja looge projekt järgmise käsuga:
$ mvn arhetüüp: genereeri -DgroupId = com.ettevõtte nimi.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = vale
See peaks looma kaustade struktuuri ja genereerima väljundi, mis näeb välja selline:
[INFO] Projektide otsimine ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Maven Stubi projekti ehitamine (POM-i pole) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: genereeri (vaikimisi-cli)> genereeri-allikad
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-arhetüübi pistikprogramm: 3.0.0: genereeri (vaikimisi-cli) @ standalone-pom ---
[INFO] Projekti genereerimine pakkimisrežiimis
[INFO] ----------------------------------------------------------------------------
[INFO] Järgmiste parameetrite kasutamine projekti Vanast (1.x) arhetüüp:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameeter: baseeruväärtus, väärtus: / Kasutajad / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameeter: pakett, väärtus: kom.ettevõtte nimi.Tere, Maailm
[INFO] Parameeter: groupId, väärtus: com.ettevõtte nimi.Tere, Maailm
[INFO] Parameeter: artifactId, väärtus: helloworld
[INFO] Parameeter: packageName, Value: com.ettevõtte nimi.Tere, Maailm
[INFO] Parameeter: versioon, väärtus: 1.0-PIKKUS
[INFO] projekt loodud vanast (1.x) Arhetüüp kataloogis: / Kasutajad / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] EHITADA EDUKUST
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg: 8.602 s
[INFO] Lõppenud: 2018-01-27T00: 05: 37-08: 00
[INFO] Lõplik mälu: 15M / 152M
[INFO] ------------------------------------------------------------------------
Kaustade struktuur peaks välja nägema selline:
Tere, Maailm| - pom.xml
'- src
| - peamine
| '- java
| '- com
| '- ettevõtte nimi
| '-- Tere, Maailm
| '- rakendus.java
'- test
'- java
'- com
'- ettevõtte nimi
'-- Tere, Maailm
'- AppTest.java
Pomm.xml sisaldab ehituskonfiguratsioone. Pommi sees.xml näeb kood välja selline:
_0.xsd ">
JAR-faili saate luua järgmise käsuga:
pakett $ mvn[INFO] Projektide otsimine ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Helloworldi ehitamine 1.0-PIKKUS
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- plugin maven-resources: 2.6: ressursid (vaikeressursid) @ helloworld ---
[HOIATUS] Platvormkodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.e.
ehitada sõltub platvormist!
[INFO] Jätke vahele olemasolev ressursikataloog / Kasutajad / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompileerimine (vaikekompileerimine) @ helloworld ---
[INFO] Tuvastatud muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failikodeering pole seadistatud, kasutades platvormkodeeringut UTF-8, st.e. ehitada on
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi / Users / zak / _work / LearnBuildScripts / LearnMaven /
kaasmaailm / sihtmärk / klassid
[INFO]
[INFO] --- plugin maven-resources: 2.6: testResources (vaikimisi testResources) @
Tere, Maailm ---
[HOIATUS] Platvormkodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.e.
ehitada sõltub platvormist!
[INFO] Jätke vahele olemasolev ressursikataloog / Kasutajad / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / ressursid
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (vaikimisi testCompile) @ helloworld ---
[INFO] Tuvastatud muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failikodeering pole seadistatud, kasutades platvormkodeeringut UTF-8, st.e. ehitada on
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-klassid
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (vaikimisi test) @ helloworld ---
[INFO] Kindlate aruannete kataloog: / Kasutajad / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
kindlus-teated
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Jooks com.ettevõtte nimi.Tere, Maailm.AppTest
Testid on käivitatud: 1, tõrked: 0, vead: 0, vahele jäetud: 0, kulunud aeg: 0.014 sekundit
Tulemused :
Testid on käivitatud: 1, tõrked: 0, vead: 0, vahele jäetud: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: purk (vaikimisi purk) @ helloworld ---
[INFO] Ehituskarp: / Kasutajad / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
kaasmaailm-1.0-PIKKUS.purk
[INFO] ------------------------------------------------------------------------
[INFO] EHITADA EDUKUST
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg: 5.624 s
[INFO] Lõppenud: 2018-01-27T00: 11: 10-08: 00
[INFO] Lõplik mälu: 16M / 114M
[INFO] ------------------------------------------------------------------------
Võite jar-faili käivitada järgmiselt:
$ java -cp target / helloworld-1.0-PIKKUS.purk com.ettevõtte nimi.Tere, Maailm.RakendusTere, Maailm!
Purgifail pannakse sihtkausta.
Gradle
Gradle ühendab endas Sipelga ja Maveni jõu. Gradle'i esimene versioon ilmus 2012. aastal. See on kiiresti vastu võetud. Google kasutab seda praegu Android OS-i jaoks.
XML-i asemel kasutab Gradle Groovy keelt. Seetõttu on Gradle'is koostatud skripte lihtsam kirjutada ja lugeda. Algselt kasutas ta sõltuvushalduseks Ivy't, kuid kasutab nüüd oma sõltuvusmootorit.
Plussid
- Pakub standardiseerimist, säilitades samas paindlikkuse
- Ehituskripte on lihtne lugeda ja kirjutada
- Parem on sõltuvuste mitme versiooni käsitsemine
- Oskab hallata mitut programmeerimiskeelt ja tehnoloogiat
- Aktiivne kogukond, kes 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 loomist ja Gradle Daemonit
Miinused
- IDE-integreerimine pole nii hea kui Maven
Gradle'i näide
Gradle'i saate installida siit. Kui olete Gradle'i oma teele seadistanud, saate seda kontrollida:
$ gradle --versioon------------------------------------------------------------
4. klass.5
------------------------------------------------------------
Ehitamise aeg: 2018-01-24 17:04:52 UTC
Redaktsioon: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Sipelgas: Apache Ant (TM) versioon 1.9.9 koostatud 2. veebruaril 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Järgmisena looge järgmine kataloogistruktuur:
Tere, Maailm| - ehitada.gradle
'- src
| - peamine
'- java
'-- Tere, Maailm
'-- Tere, Maailm.java
Kaasmaailma jaoks.java pani koodi sipelga näitest. Ja ehitamiseks.gradle pani järgmise koodi:
rakendage pistikprogrammi: 'java'versioon = '1.0 '
hoidlad
mavenCentral ()
sõltuvused
testKompileerige rühm: 'junit', nimi: 'junit', versioon: '4.12 '
Kõigi saadaolevate käskude vaatamiseks võite kasutada käsku „gradle task -all”. Gradle võtab automaatselt üles järjel määratud pluginad.gradle faili ja näitab pistikprogrammide tõttu saadaolevaid lisaülesandeid.
Ehituse saate käivitades:
$ gradle purkEHITAGE 1 sekundiga edukalt
2 teostatavat ülesannet: 2 täidetud
Võite oma purki käivitada järgmiselt:
$ java -cp build / libs / helloworld-1.0.purgikaaslaneTere, 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 tagamaks, et kõik arendajad järgivad samu reegleid. Gradle on uusim tööriist, mis pakub kõige rohkem paindlikkust.
Viited:
- http: // ant.apache.org /
- http: // ant.apache.org / ivy /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-example
- https: // näited.javacodegeeks.com / core-java / gradle / gradle-tere-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / guides / alustamine / viie minuti jooksul vormistamine.HTML
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // tehnoloogiakonverentsid.com / 2014/06/18 / build-tools /
- https: // www.kvoora.com / Mis on Maven-versus-Ant-plusse ja miinuseid-kui-Java-ehitustööriistu