Ohjelmistokehityksen aikana kehittäjien on rakennettava sama koodi uudelleen ja uudelleen. He yrittävät usein käyttää bash -skriptejä tai muita skriptikieliä tehtävän automatisoimiseen. Saatavilla on kuitenkin rakennustyökaluja, jotka sopivat paremmin rakennusautomaatioon. Hallitsevat rakennustyökalut ovat:
- Apache Ant kanssa Muratti
- Maven
- Gradle
Tutkitaan työkaluja saadaksesi lisätietoja.
Apache Ant ja Ivy
Apache Ant on Java-pohjainen komentorivityökalu, joka käyttää XML-tiedostoja määrittäessään rakennuskomentosarjoja. Sitä käytetään pääasiassa Java -rakennelmiin, mutta sitä voidaan käyttää myös C/C ++ -kehitykseen. Sisäänrakennetut tehtävät tarjoavat tapoja koota, koota, testata ja käyttää ohjelmistosovelluksia. Käyttäjät voivat myös luoda omia vastavalojaan parantaakseen Antin toimivuutta. Apache Ivy on riippuvuuksien hallintatyökalu, joka integroituu helposti Antin kanssa vahvemman ekosysteemin luomiseksi. Antin kehitys alkoi vuonna 2000.
Plussat
- Parempi hallita koko rakennusprosessia
- Riittävän joustava työskentelemään minkä tahansa työprosessin kanssa
Haittoja
- XML -pohjaiset koontitiedostot voivat kasvaa suuriksi ja niitä ei voida ylläpitää
- Rakennuskomentosarjojen ylläpitoon tarvitaan paljon aikaa ja resursseja
- IDE -integraatiota on vaikea saavuttaa
Muurahainen Ivy -esimerkillä
Voit asentaa uusimman Antin osoitteesta tässä . Sinun on ladattava zip, laajennettava ja asetettava roskakorikansio polullesi. Voit tarkistaa seuraavan komennon avulla, onko Ant asennettu oikein:
$ muurahainen-versioApache Ant(TM)versio 1.10.1, koottu helmikuussa2 2017
Kun olet asentanut Antin, voit ladata uusimman Ivy -purkin ja laittaa sen Ant -hakemiston lib -kansioon.
Kun olet asentanut Antin, luo kansioita helloworld ja helloworld/src. Laita src -kansion sisälle helloworld.java -tiedosto, jossa on koodi:
/ **************************Tulostaa Hello World!
*************************** /
julkinen luokkaHei maailma{
julkinen staattinen mitätöntärkein( Jousisoitin []args) {
Järjestelmä .ulos.println('Hei maailma!');
}
}
Luo nyt helloworld -kansioon build.xml -tiedosto, jolla on seuraava koodi:
Luo samaan helloworld -kansioon ivy.xml -tiedosto seuraavalla koodilla:
>
Hakemistorakenteen pitäisi näyttää tältä:
Hei maailma|- build.xml
| - muratti.xml
`- src
`- helloworld.java
Nyt voit suorittaa rakennuksen komennolla:
$muurahainenpurkkiOnnistuneen rakenteen pitäisi tuottaa seuraavanlainen tulos:
$ muurahaispurkkiRakennustiedosto: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
ratkaista:
[muratti: hae] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: noutaa] :: latausasetukset :: 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
[muratti: hae] :: riippuvuuksien ratkaiseminen :: org.apache#helloworld; [sähköposti suojattu]
MacBook-Air. Paikallinen
[muratti: hae] confs: [oletus]
[muratti: noutaa] löytyi junit#junit; 4.12 julkisesti
[muratti: hae] löytyi org.hamcrest#hamcrest-core; 1.3 julkisesti
[muratti: hae] :: päätöslauselmaraportti :: ratkaise 397 ms :: artefaktit dl 15 ms
-------------------------------------------------- -------------------
| | moduulit || esineitä |
| conf | numero | etsi | häipynyt | häädetty || numero | hukassa |
-------------------------------------------------- -------------------
| oletus | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[muratti: hae] :: nouto :: org.apache#helloworld
[muratti: hae] confs: [oletus]
[muratti: hae] 0 esineitä kopioitu, 4 jo haettu (0 kt/39 ms)
koota:
[mkdir] Luotu ohj:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
luokat
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: varoitus:
'includeantruntime' -asetusta ei ole määritetty, oletusarvo on build.sysclasspath = last; asetettu arvoon false
toistettaville rakenteille
[javac] 1 lähdetiedoston kokoaminen/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/rakentaa/luokat
purkki:
[mkdir] Luo kansio:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Rakennuspurkki:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar
RAKENNETTU MENESTYNYT
Kokonaisaika: 6 sekuntia
Voit kokeilla jar -tiedostoa seuraavasti:
$ java -cp build/bin/helloworld.purkkiHei maailmaHei maailma!
Olemme määrittäneet jar -tiedoston, joka laitetaan build/bin -kansioon. Kansiot luodaan rakentamisen aikana. Ant jar -komento kutsuu jar.kohteen build.xml -tiedostossa.
Maven
Maven kehitettiin ratkaisemaan Ant-pohjaisen komentosarjan ongelmat. Se säilytti XML -tiedostot, mutta otti erilaisen lähestymistavan organisaatioon. Antissa kehittäjien on luotava kaikki tehtävät. Maven vähentää tehtävien luomista ottamalla käyttöön tiukempia standardeja koodin järjestämiseen. Tämän seurauksena on helpompi aloittaa vakioprojekteissa.
Se esitteli myös riippuvuuslatauksia, jotka helpottivat kehitystä. Ennen Ivyin käyttöönottoa Antissa käyttäjien oli hallittava riippuvuuksia paikallisesti. Maven omaksui ensin riippuvuuksien hallinnan filosofian.
Mavensin tiukat standardit vaikeuttavat kuitenkin räätälöityjen komentosarjojen kirjoittamista. Työkalua on helppo käyttää, kunhan projekti noudattaa tiukkoja standardeja.
Plussat
- Automaattiset riippuvuuslataukset
- Kaikki riippuvuudet tallennetaan automaattisesti lähdeohjaukseen osana Maven -komentosarjoja
- Standardoi ja yksinkertaistaa rakennusprosessia
- Helppo integroida IDE- ja CI/CD -järjestelmiin
Haittoja
- Ei joustava mukautettujen työnkulkujen luomisessa
- Jyrkkä oppimiskäyrä ja prosessi on aloittelijoiden vaikea ymmärtää
- Rakentamiseen liittyvien ongelmien ja uusien kirjastointegraatioiden ratkaiseminen vie aikaa
- Ei hyvä, jos samasta riippuvuudesta on useita versioita
Esimerkki Mavenista
Voit ladata uusimman Mavenin osoitteesta tässä . Voit tarkistaa asennuksen seuraavasti:
$ mvn --versioApache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Mavenin kotisivu: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java -versio: 1.8.0_74, toimittaja: Oracle Corporation
Java -etusivu: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Sisältö/Etusivu/jre
Oletuskieli: en_US, alustan koodaus: UTF-8
Käyttöjärjestelmän nimi:'Mac-käyttöjärjestelmän kymmenes versio', versio:'10 .11,6 ', kaari:'x86_64', perhe:'mac'
Luo helloworld -kansio ja luo projekti seuraavalla komennolla:
$ mvn arkkityyppi: luo -DgroupId = com.Yrityksen nimi.Hei maailma-DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =väärä
Sen pitäisi luoda kansiorakenne ja luoda tulos, joka näyttää tältä:
[INFO] Etsitään projekteja ...[TIEDOT]
[INFO] ----------------------------------------------- -------------------------
[INFO] Rakennus Maven Stub Project (No POM) 1
[INFO] ----------------------------------------------- -------------------------
[TIEDOT]
[INFO] >>> maven-archetype-plugin: 3.0.0 :generate (default-cli) >gene-sources
@ itsenäinen pom >>>
[TIEDOT]
[TIEDOT]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom<<<
[TIEDOT]
[TIEDOT]
[INFO] --- maven-archetype-plugin: 3.0.0: create (default-cli) @ standalone-pom ---
[INFO] Luodaan projekti erätilassa
[INFO] ----------------------------------------------- -----------------------------
[INFO] Seuraavien parametrien käyttäminen projektin luomiseen vanhasta (1.x) arkkityypistä:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametri: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametri: paketti, arvo: com.comyhtiönimi.helloworld
[INFO] Parametri: groupId, Value: com.comyhtiönimi.helloworld
[INFO] Parametri: artifactId, Arvo: helloworld
[INFO] Parametri: packageName, Value: com.comyrityksenimi.helloworld
[INFO] Parametri: versio, arvo: 1.0-SNAPSHOT
[INFO] -projekti luotu vanhasta (1.x) arkkityypistä ohjauksessa:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] RAKENNA MENESTYS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kokonaisaika: 8,602 s
[INFO] Valmistui: 2018-01-27T00: 05: 37-08: 00
[INFO] Lopullinen muisti: 15M/152M
[INFO] ----------------------------------------------- -------------------------
Kansiorakenteen pitäisi näyttää tältä:
Hei maailma|- pom.xml
``- src
|- pää
| ``-java
| ``-- kanssa
| ``-- Yrityksen nimi
| ``-- Hei maailma
| ``- Sovellus. Java
``-testata
``-java
``-- kanssa
``-- Yrityksen nimi
``-- Hei maailma
``- AppTest.java
Pom.xml sisältää koontimääritykset. Pom.xml -koodin sisällä koodi näyttää tältä:
XMLSchema-esiintymä '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>
>
Voit luoda jar -tiedoston seuraavan komennon avulla:
$ mvn paketti[INFO] Etsitään projekteja ...
[TIEDOT]
[INFO] ----------------------------------------------- -------------------------
[INFO] Rakenna helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[TIEDOT]
[INFO] --- maven-resources-plugin: 2.6: resurssit (oletusresurssit) @ helloworld ---
[VAROITUS] Alustan koodauksen (UTF-8) käyttäminen suodatettujen resurssien kopioimiseen, ts.
rakenne riippuu alustasta!
[INFO] ohita olemassa oleva resurssihakemisto/Käyttäjät/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[TIEDOT]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Muutoksia havaittu - moduulin kokoaminen uudelleen!
[VAROITUS] Tiedoston koodausta ei ole määritetty käyttämällä UTF-8-käyttöympäristökoodausta eli koontiversiota
alustasta riippuvainen!
[INFO] 1 lähdetiedoston kokoaminen/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/kohde/luokat
[TIEDOT]
[INFO] --- maven-resources-plugin: 2.6: testResources (oletus-testResources) @
Hei maailma ---
[VAROITUS] Alustan koodauksen (UTF-8) käyttäminen suodatettujen resurssien kopioimiseen, ts.
rakenne riippuu alustasta!
[INFO] ohita olemassa oleva resurssihakemisto/Käyttäjät/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[TIEDOT]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Muutoksia havaittu - moduulin kokoaminen uudelleen!
[VAROITUS] Tiedoston koodausta ei ole määritetty käyttämällä UTF-8-käyttöympäristökoodausta eli koontiversiota
alustasta riippuvainen!
[INFO] 1 lähdetiedoston kääntäminen/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-class
[TIEDOT]
[INFO] --- maven-surefire-plugin: 2.12.4: testi (oletustesti) @ helloworld ---
[INFO] Surefire -raporttihakemisto:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
varmoja raportteja
-------------------------------------------------- -----
T E S T S.
-------------------------------------------------- -----
Käynnissä com.companyname.helloworld.AppTest
Testit suoritetaan: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0, kulunut aika: 0,014 sek
Tulokset:
Testit suoritetaan: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0
[TIEDOT]
[INFO] --- maven-jar-plugin: 2.4: jar (oletus-jar) @ helloworld ---
[INFO] Rakennuspurkki:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] RAKENNA MENESTYS
[INFO] ----------------------------------------------- -------------------------
[INFO] Kokonaisaika: 5,624 s
[INFO] Valmistui: 2018-01-27T00: 11: 10-08: 00
[INFO] Lopullinen muisti: 16M/114M
[INFO] ----------------------------------------------- -------------------------
Voit suorittaa jar -tiedoston seuraavasti:
$ java -cp target/helloworld-1.0-KUVAUS.purkkikanssa.Yrityksen nimi.Hei maailma.SovellusHei maailma!
Jar -tiedosto laitetaan kohdekansioon.
Gradle
Gradle yhdistää Antin ja Mavenin voiman. Ensimmäinen versio Gradlesta julkaistiin vuonna 2012. Se on nähnyt nopean käyttöönoton. Google käyttää sitä tällä hetkellä Android -käyttöjärjestelmälle.
Gradle käyttää XML: n sijasta Groovyn kieltä. Tämän seurauksena Gradlen skriptien kirjoittaminen ja lukeminen on helpompaa. Se käytti alun perin Ivyä riippuvuuden hallintaan, mutta nyt se käyttää omaa riippuvuusmoottoriaan.
Plussat
- Tarjoaa standardoinnin pysyen joustavana
- Helppo lukea ja kirjoittaa rakentaa komentosarjoja
- Parempi käsitellä useita versioita riippuvuuksista
- Pystyy käsittelemään useita ohjelmointikieliä ja -tekniikoita
- Aktiivinen yhteisö auttaa työkalun kehittämisessä
- Gradle DSL (Domain-Specific Language) tekee siitä yksinkertaisen kokoonpanorakenteen
- Gradle tarjoaa suorituskyvyn parannuksia asteittain, rakenna välimuisti ja Gradle Daemon
Haittoja
- IDE -integraatio ei ole yhtä hyvä kuin Maven
Gradle Esimerkki
Voit asentaa Gradlen osoitteesta tässä . Kun olet määrittänyt Gradlen polullesi, voit tarkistaa sen seuraavasti:
$ gradle--versio-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------
Rakennusaika:2018-01-24 17: 04:52UTC
Versio: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Muurahainen: Apache Ant(TM)versio 1.9.9, koottu helmikuussa2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Käyttöjärjestelmä: Mac OS X 10.11.6 x86_64
Luo seuraavaksi seuraava hakemistorakenne:
Hei maailma| -rakentaa.asteikko
``-src
| -tärkein
``-java
``-Hei maailma
``-Hei maailma.java
Saat helloworld.java koodin Ant -esimerkistä. Ja build.gradle varten kirjoita seuraava koodi:
käytä laajennusta: 'java'versio= '1.0'
arkistot{
mavenCentral()
}
riippuvuuksia{
testCompile -ryhmä: 'junit', nimi: 'junit', versio: '4.12'
}
Voit tarkastella kaikkia käytettävissä olevia komentoja asteikkotehtävillä - kaikki komento. Gradle hakee automaattisesti build.gradle -tiedostossa määrittämäsi laajennukset ja näyttää laajennuksista johtuvat lisätehtävät.
Voit saada rakenteen suorittamalla:
$ gradle purkkiRAKENTAA MENESTYNYT 1 sekunnissa
2toteutettavat tehtävät:2teloitettu
Voit käyttää purkkiasi seuraavasti:
$ java -cp build/libs/helloworld-1.0.purkkiHei maailmaHei maailma!
Jar -tiedosto tallennetaan build/libs -kansioon.
Johtopäätös
Rakennustyökaluista Ant voi olla hyödyllinen pienemmissä projekteissa, kun taas Maven varmistaa paremmin, että kaikki kehittäjät noudattavat samoja sääntöjä. Gradle on uusin työkalu, joka tarjoaa eniten joustavuutta.
Viitteet:
- 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