Tarkvara arendamise ajal peavad arendajad sama koodi uuesti ja uuesti üles ehitama. Sageli proovivad nad ülesande automatiseerimiseks kasutada bash -skripte või muid skriptikeeli. Siiski on saadaval ehitustööriistu, mis on ehituse automatiseerimiseks sobivamad. Peamised ehitustööriistad on:
- Apache Ant koos Ivy
- Maven
- Gradle
Uurime tööriistu, et rohkem teada saada.
Apache Ant koos Ivyga
Apache Ant on Java-põhine käsureatööriist, mis kasutab ehitusskriptide määratlemiseks XML-faile. Seda kasutatakse peamiselt Java -ehitiste jaoks, kuid seda saab kasutada ka C/C ++ arendamiseks. Sisseehitatud ülesanded pakuvad võimalusi tarkvararakenduste koostamiseks, kokkupanekuks, testimiseks ja käitamiseks. Kasutajad saavad Ant -i funktsionaalsuse parandamiseks luua ka oma liibusid. Apache Ivy on sõltuvuste haldamise tööriist, mis integreerub hõlpsalt Antiga, et pakkuda tugevamat ökosüsteemi. Sipelga arendamine algas 2000. aastal.
Plussid
- Parem kontroll kogu ehitusprotsessi üle
- Piisavalt paindlik, et töötada mis tahes tööprotsessiga
Miinused
- XML -põhised koostamisfailid võivad suureneda ja neid ei saa hooldada
- Ehitusskriptide säilitamiseks on vaja palju aega ja ressursse
- IDE integratsiooni on raske saavutada
Sipelgas luuderohuga Näide
Saate installida uusima Ant siin . Peate alla laadima ZIP -faili, laiendama ja panema prügikasti oma teele. Järgmise käsu abil saate kontrollida, kas Ant on õigesti installitud:
$ ant-versioonApache Ant(TM)versioon 1.10.1 koostatud veebruaris2 2017.
Kui olete Ant installinud, saate alla laadida uusima Ivy purgi ja panna selle kataloogi Ant kataloogi lib kausta.
Pärast Ant'i installimist looge kaustad helloworld ja helloworld/src. Pange src kausta sisse fail helloworld.java koos koodiga:
/ **************************Prindib välja 'Tere maailm!'
*************************** /
avalik klassiTere, Maailm{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.println('Tere, Maailm!');
}
}
Nüüd looge kaustas helloworld fail build.xml järgmise koodiga:
Ja looge samasse helloworldi kausta faili ivy.xml järgmise koodiga:
>
Kataloogistruktuur peaks välja nägema selline:
Tere, Maailm|- build.xml
| - luuderohi.xml
`- src
`- helloworld.java
Nüüd saate ehitamist käivitada käsuga:
$sipelgaspurkEdukas ehitamine peaks andma järgmise väljundi:
$ sipelga purkEhitusfail: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
lahendada:
[luuderohi: allalaadimine] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: laadida] :: laadimisseaded :: 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
[luuderohi: allalaadimine] :: sõltuvuste lahendamine :: org.apache#helloworld; [e -post kaitstud]
MacBook-Air.local
[ivy: laadida] confs: [vaikimisi]
[ivy: retrieve] leidis avalikult junit#junit; 4.12
[luuderohi: toomine] leiti org.hamcrest#hamcrest-core; 1.3 avalikult
[luuderohi: allalaadimine] :: resolutsiooniaruanne :: lahendamine 397 ms :: esemed dl 15 ms
-------------------------------------------------- -------------------
| | moodulid || esemed |
| conf | number | otsi | äraheidetud | välja tõstetud || arv | maha surutud |
-------------------------------------------------- -------------------
| vaikimisi | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[luuderohi: laadida] :: allalaadimine :: org.apache#helloworld
[ivy: laadida] confs: [vaikimisi]
[luuderohi: toomine] 0 artefakti on kopeeritud, 4 on juba alla laaditud (0 kB/39 ms)
koostada:
[mkdir] Loodud dir:/Kasutajad/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klassid
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: hoiatus:
'includeantruntime' ei olnud määratud, vaikimisi build.sysclasspath = last; väärtuseks vale
korratavate ehitiste jaoks
[javac] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/klassid
purk:
[mkdir] Loodud dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[purk] Ehituspurk:/Kasutajad/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar
EHITATUD EHITADA
Koguaeg: 6 sekundit
Purgi faili saate proovida järgmiselt:
$ java -cp build/bin/helloworld.purkTere, MaailmTere, Maailm!
Oleme määratlenud jar/faili, mis pannakse kausta build/bin. Kaustad luuakse ehitamise ajal. Sipelgapurgi käsk kutsub purgi sihtmärki failis build.xml.
Maven
Maven töötati välja sipelgapõhiste skriptidega seotud probleemide lahendamiseks. See säilitas XML -failid, kuid lähenes organisatsioonile erinevalt. Antis peavad arendajad looma kõik ülesanded. Maven vähendab ülesannete loomist, rakendades koodi korraldamiseks rangemaid standardeid. Selle tulemusel on lihtsam alustada standardprojektidega.
See tutvustas ka sõltuvuse allalaadimist, mis muutis arengu lihtsamaks. Enne Ivy kasutuselevõttu Antis pidid kasutajad sõltuvusi kohapeal haldama. Maven võttis kõigepealt vastu sõltuvusjuhtimise filosoofia.
Kuid Mavensi ranged standardid muudavad kohandatud ehitusskriptide kirjutamise keeruliseks. Tööriistaga on lihtne töötada, kui projekt järgib rangeid standardeid.
Plussid
- Sõltuvuse automaatne allalaadimine
- Kõik sõltuvused salvestatakse Maveni skriptide osana automaatselt allika juhtelementi
- Standardiseerib ja lihtsustab koostamisprotsessi
- Lihtsalt integreeritav IDE -de ja CI/CD süsteemidega
Miinused
- Pole paindlik kohandatud töövoogude loomisel
- Järsk õppimiskõver ja seda protsessi on algajatel raske mõista
- Koostamisprobleemide ja uute raamatukogude integreerimise lahendamine on aeganõudev
- Ei ole hea sama sõltuvuse mitme versiooniga
Maveni näide
Uusima Maveni saate alla laadida saidilt siin . Saate installimist kontrollida järgmiselt.
$ mvn -versioonApache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maveni kodu: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java versioon: 1.8.0_74, müüja: Oracle Corporation
Java avaleht: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Sisu/Avaleht/jre
Vaikimisi lokaat: en_US, platvormi kodeering: UTF-8
OS -i nimi:'mac os x', versioon:„10 .11,6”, kaar:'x86_64', perekond:'mac'
Looge helloworld kaust ja genereerige projekt järgmise käsuga:
$ mvn arhetüüp: genereeri -DgroupId = com.ettevõtte nimi.Tere, Maailm-DartifactId = teremaailm-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =vale
See peaks looma kaustastruktuuri ja genereerima väljundi, mis näeb välja selline:
[INFO] Projektide otsimine ...[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Maven Stub'i ehitamine (POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: create (default-cli)> create-sources
@ iseseisev pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ iseseisev-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generate (default-cli) @ standalone-pom ---
[INFO] Projekti loomine partiirežiimis
[INFO] ----------------------------------------------- -----------------------------
[INFO] Kasutades järgmisi parameetreid projekti loomiseks vanast (1.x) arhetüübist:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameeter: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameeter: pakett, väärtus: com.comettevõtte nimi.helloworld
[INFO] Parameeter: groupId, Value: com.comfirmanimi.helloworld
[INFO] Parameeter: artifactId, väärtus: helloworld
[INFO] Parameeter: packageName, Value: com.comfirmanimi.helloworld
[INFO] Parameeter: versioon, väärtus: 1.0-SNAPSHOT
[INFO] projekt on loodud vanast (1.x) arhetüübist rež./Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] EHITUSE EHITAMINE
[INFO] ----------------------------------------------- -------------------------
[INFO] Koguaeg: 8,602 s
[INFO] Lõpetatud: 2018-01-27T00: 05: 37-08: 00
[INFO] Lõpumälu: 15M/152M
[INFO] ----------------------------------------------- -------------------------
Kausta struktuur peaks välja nägema selline:
Tere, Maailm|- pom.xml
''- src
|- peamine
| ''-java
| ''- koos
| ''- ettevõtte nimi
| ''-- Tere, Maailm
| ''- App.java
''-test
''-java
''- koos
''- ettevõtte nimi
''-- Tere, Maailm
''- AppTest.java
Pom.xml sisaldab ehituse konfiguratsioone. Pom.xml sees näeb kood välja selline:
XMLSchema-eksemplar '
xsi: schemaLocation=„http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>
>
Jar -faili saate genereerida järgmise käsu abil:
$ mvn pakett[INFO] Projektide otsimine ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Helloworldi ehitamine 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[HOIATUS] Platvormi kodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.
build sõltub platvormist!
[INFO] jätke olematu ressurss vahele Kataloog/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompileeri (vaikimisi kompileeri) @ helloworld ---
[INFO] Tuvastati muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failide kodeeringut ei ole määratud, kasutades platvormi kodeeringut UTF-8, s.t. build
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnMaven/
teremaailm/sihtmärk/klassid
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Tere, Maailm ---
[HOIATUS] Platvormi kodeeringu (tegelikult UTF-8) kasutamine filtreeritud ressursside kopeerimiseks, s.t.
build sõltub platvormist!
[INFO] jätke olematu ressurss vahele Kataloog/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Tuvastati muudatused - mooduli uuesti kompileerimine!
[HOIATUS] Failide kodeeringut ei ole määratud, kasutades platvormi kodeeringut UTF-8, s.t. build
platvormist sõltuv!
[INFO] 1 lähtefaili koostamine kataloogi/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-class
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (vaikimisi test) @ helloworld ---
[INFO] Surefire aruannete kataloog:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
kindlad aruanded
-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Käivitab com.comfirmanimi.helloworld.AppTest
Testid: 1, ebaõnnestumised: 0, vead: 0, vahele jäetud: 0, kulunud aeg: 0,014 sekundit
Tulemused :
Testid: 1, ebaõnnestumised: 0, vead: 0, vahele jäetud: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (vaikimisi purk) @ helloworld ---
[INFO] Ehituspurk:/Kasutajad/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] EHITUSE EHITAMINE
[INFO] ----------------------------------------------- -------------------------
[INFO] Koguaeg: 5,624 s
[INFO] Lõpetatud: 2018-01-27T00: 11: 10-08: 00
[INFO] Lõpumälu: 16M/114M
[INFO] ----------------------------------------------- -------------------------
Jar -faili saate käivitada järgmiselt.
$ java -cp target/helloworld-1.0-SNAPSHOT.purkkoos.ettevõtte nimi.Tere, Maailm.RakendusTere, Maailm!
Purkfail pannakse sihtkausta.
Gradle
Gradle ühendab endas Sipelga ja Maveni jõu. Gradle'i esimene versioon ilmus 2012. aastal. See on kiiresti kasutusele võetud. Google kasutab seda praegu Android OS -i jaoks.
XML -i asemel kasutab Gradle Groovy keelt. Selle tulemusena on Gradle'i skripte lihtsam kirjutada ja lugeda. Algselt kasutas see sõltuvuste haldamiseks Ivy -d, kuid nüüd kasutab see oma sõltuvusmootorit.
Plussid
- Pakub standardimist, jäädes samas paindlikuks
- Lihtne lugeda ja kirjutada ehitusskripte
- Parem on hakkama saada mitme sõltuvusversiooniga
- Saab hakkama mitme programmeerimiskeele ja tehnoloogiaga
- Aktiivne kogukond 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 ja Gradle Daemoni
Miinused
- IDE integratsioon pole nii hea kui Maven
Gradle'i näide
Gradle'i saate installida aadressilt siin . Kui olete Gradle'i oma teele seadistanud, saate seda kontrollida järgmiselt.
$ gradle--versioon-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------
Ehitamise aeg:2018-01-24 17: 04:52UTC
Läbivaatamine: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Sipelgas: Apache Ant(TM)versioon 1.9.9 koostatud veebruaris2 2017.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64
Seejärel looge järgmine kataloogistruktuur:
Tere, Maailm| -ehitada.gradle
''-src
| -peamine
''-java
''-Tere, Maailm
''-Tere, Maailm.java
Helloworld.java jaoks pange kood sipelga näitest. Ja build.gradle jaoks sisestage järgmine kood:
rakendage pluginat: 'java'versioon= '1.0'
hoidlad{
mavenCentral()
}
sõltuvused{
testCompile rühm: 'junit', nimi: 'junit', versioon: „4.12”
}
Kõigi saadaolevate käskude vaatamiseks saate kasutada käsku gradle ülesanded - kõik. Gradle võtab automaatselt üles failis build.gradle määratud pistikprogrammid ja näitab lisandmoodulite tõttu saadaolevaid lisaülesandeid.
Ehituse saate joostes:
$ gradle purkEHITADA EDUKAS 1 sekundi jooksul
2teostatavad ülesanded:2hukati
Saate oma purki käivitada järgmiselt:
$ java -cp build/libs/helloworld-1.0.purkTere, MaailmTere, 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 veendumaks, 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://examples.javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https://gradle.org/maven-vs-gradle/
- https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- https://stackoverflow.com/questions/20755437/java-build-tools-ant-vs-maven
- https://technologyconversations.com/2014/06/18/build-tools/
- https://www.quora.com/What-are-the-pros-and-cons-of-Maven-versus-Ant-as-building-tools-for-Java