A szoftverfejlesztés során a fejlesztőknek újra és újra fel kell építeniük ugyanazt a kódot. Gyakran próbálnak bash szkripteket vagy más szkriptnyelveket használni a feladat automatizálásához. Vannak azonban olyan építési eszközök, amelyek jobban megfelelnek az építési automatizálásnak. A fő építőeszközök a következők:
- Apache Ant val vel Borostyán
- Maven
- Gradle
Vizsgáljuk meg az eszközöket, hogy többet megtudjunk.
Apache Hangya Ivy -vel
Az Apache Ant egy Java alapú parancssori eszköz, amely XML fájlokat használ a build szkriptek meghatározásához. Elsősorban Java buildekhez használják, de C/C ++ fejlesztéshez is használható. A beépített feladatok lehetővé teszik a szoftveralkalmazások összeállítását, összeállítását, tesztelését és futtatását. A felhasználók saját antilib -eket is létrehozhatnak az Ant működésének javítása érdekében. Az Apache Ivy egy függőségkezelő eszköz, amely könnyen integrálható az Ant -szal, hogy robusztusabb ökoszisztémát biztosítson. Az Ant fejlesztése 2000 -ben kezdődött.
Előnyök
- Jobb ellenőrzés a teljes építési folyamat felett
- Elég rugalmas bármilyen munkafolyamathoz
Hátrányok
- Az XML -alapú buildfájlok nagyok lehetnek és karbantarthatatlanok
- Sok idő és erőforrás szükséges a build szkriptek karbantartásához
- Az IDE integrációt nehéz elérni
Hangya borostyánnal Példa
A legújabb Ant telepítheti innen itt . Töltse le a zip fájlt, bontsa ki, és helyezze a bin mappát az útvonalába. A következő paranccsal ellenőrizheti, hogy az Ant megfelelően van -e telepítve:
$ hangya-változatApache Ant(TM)februárban összeállított 1.10.1 verzió2 2017.
Miután telepítette a hangyát, letöltheti a legújabb Ivy jar -t, és behelyezheti a lib mappába az Ant könyvtárban.
Az Ant telepítése után hozzon létre helloworld és helloworld/src mappákat. Az src mappába tegye a helloworld.java fájlt a következő kóddal:
/ **************************Kinyomtatja a 'Hello World!'
*************************** /
nyilvános osztályHelló Világ{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.println('Helló Világ!');
}
}
Most a helloworld mappában hozzon létre egy build.xml fájlt a következő kóddal:
És ugyanabban a helloworld mappában hozza létre az ivy.xml fájlt a következő kóddal:
>
A könyvtárszerkezetnek így kell kinéznie:
Helló Világ|- build.xml
| - borostyán.xml
`- src
`- helloworld.java
Most futtathatja a buildet a következő paranccsal:
$hangyabefőttes üvegA sikeres építésnek az alábbi kimenetet kell biztosítania:
$ hangyasorBuildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
elhatározás:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: betöltési beállítások :: 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
[ivy: retrieve] :: függőségek feloldása :: org.apache#helloworld; [e -mail védett]
MacBook-Air.local
[ivy: retrieve] confs: [alapértelmezett]
[borostyán: visszakeresés] a junit#junit; 4.12 nyilvános helyen található
[ivy: retrieve] megtalálta az org.hamcrest#hamcrest-core; 1.3 nyilvánosan
[ivy: retrieve] :: felbontási jelentés :: 397 ms :: műtárgyak dl 15ms
-------------------------------------------------- -------------------
| | modulok || műtermékek |
| conf | szám | keresés | dwnlded | kilakoltatva || szám | dwnlded |
-------------------------------------------------- -------------------
| alapértelmezett | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: retrieving :: org.apache#helloworld
[ivy: retrieve] confs: [alapértelmezett]
[ivy: retrieve] 0 műtárgy másolva, 4 már lekérve (0 KB/39 ms)
fordítás:
[mkdir] Létrehozta a dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
osztályok
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: figyelmeztetés:
A 'includeantruntime' nem volt beállítva, alapértelmezés szerint build.sysclasspath = last; hamisra állítva
megismételhető felépítésekhez
[javac] 1 forrásfájl fordítása a/Users/zak/_work/LearnBuildScripts/LearnANT/mappába
helloworld/build/osztályok
befőttes üveg:
[mkdir] Létrehozta a dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Építőedény:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar
ÉPÜLET SIKERES
Teljes idő: 6 másodperc
A jar fájlt így próbálhatod ki:
$ java -cp build/bin/helloworld.befőttes üvegHelló VilágHelló Világ!
Meghatároztuk a jar/fájlt a build/bin mappába. A mappák az építés során jönnek létre. A hangya jar parancs a build.xml fájlban meghívja a jar célt.
Maven
A Maven-t az Ant-alapú szkripteléssel kapcsolatos problémák megoldására fejlesztették ki. Megtartotta az XML fájlokat, de más megközelítést alkalmazott a szervezéshez. Az Ant alkalmazásban a fejlesztőknek létre kell hozniuk az összes feladatot. A Maven csökkenti a feladatok létrehozását azáltal, hogy szigorúbb szabványokat vezet be a kód rendszerezésére. Ennek eredményeként könnyebb elkezdeni a standard projekteket.
Függőségi letöltéseket is bevezetett, amelyek megkönnyítették a fejlesztést. Az Ivy bevezetése előtt a felhasználóknak helyben kellett kezelniük a függőségeket. Maven először a függőségkezelési filozófiát fogadta el.
A Mavens szigorú szabványai azonban megnehezítik az egyedi build szkriptek írását. Az eszközzel könnyű dolgozni, amíg a projekt megfelel a szigorú szabványoknak.
Előnyök
- Automatikus függőségi letöltések
- Minden függőség automatikusan rögzítésre kerül a forrásvezérlésben a Maven szkriptek részeként
- Szabványosítja és egyszerűsíti az építési folyamatot
- Könnyen integrálható IDE -kkel és CI/CD rendszerekkel
Hátrányok
- Nem rugalmas az egyéni munkafolyamatok létrehozásában
- Meredek tanulási görbe és a folyamat nehezen érthető a kezdők számára
- Időigényes az építési problémák és az új könyvtári integrációk megoldása
- Nem jó ugyanazon függőség több verziójával
Maven példa
A legújabb Maven -t innen töltheti le itt . A telepítést a következőképpen ellenőrizheti:
$ mvn -verzióApache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maven kezdőlap: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java verzió: 1.8.0_74, gyártó: Oracle Corporation
Java kezdőlap: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Tartalom/Főoldal/jre
Alapértelmezett területi beállítás: en_US, platform encoding: UTF-8
OS neve:'Mac OS X', verzió:„10.11,6”, boltív:'x86_64', család:'mac'
Hozzon létre egy helloworld mappát, és hozzon létre egy projektet a következő paranccsal:
$ mvn archetípus: generál -DgroupId = com.Cégnév.Helló Világ-DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =hamis
Létre kell hoznia a mappastruktúrát, és létre kell hoznia a kimenetet, amely így néz ki:
[INFO] Projektek keresése ...[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generál (alapértelmezett-cli)> generál-források
@ önálló-pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ önálló-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: create (default-cli) @ standalone-pom ---
[INFO] Projekt generálása kötegelt módban
[INFO] ----------------------------------------------- -----------------------------
[INFO] A következő paraméterek használata a régi (1.x) archetípusból történő projekt létrehozásához:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Paraméter: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Paraméter: csomag, Érték: com.comcégnév.helloworld
[INFO] Paraméter: groupId, Value: com.comcégnév.helloworld
[INFO] Paraméter: artifactId, Value: helloworld
[INFO] Paraméter: packageName, Value: com.comcégnév.helloworld
[INFO] Paraméter: verzió, Érték: 1.0-SNAPSHOT
[INFO] projekt a régi (1.x) archetípusból létrehozva a következő könyvben:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] SIKER ÉPÍTÉSE
[INFO] ----------------------------------------------- -------------------------
[INFO] Összes idő: 8,602 s
[INFO] Befejezés: 2018-01-27T00: 05: 37-08: 00
[INFO] Végső memória: 15M/152M
[INFO] ----------------------------------------------- -------------------------
A mappa szerkezetének így kell kinéznie:
Helló Világ|- pom.xml
``- src
|- fő
| ``-Jáva
| ``-- val vel
| ``-- Cégnév
| ``-- Helló Világ
| ``- App.java
``-teszt
``-Jáva
``-- val vel
``-- Cégnév
``-- Helló Világ
``- AppTest.java
A pom.xml tartalmazza a build konfigurációkat. A pom.xml -ben a kód így néz ki:
XMLSchema-példány '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>
>
A jar fájlt a következő paranccsal hozhatja létre:
$ mvn csomag[INFO] Projektek keresése ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] A helloworld 1.0-SNAPSHOT felépítése
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: erőforrások (alapértelmezett erőforrások) @ helloworld ---
[FIGYELMEZTETÉS] A platformkódolás (valójában UTF-8) használata a szűrt erőforrások másolásához, azaz
a build platformfüggő!
[INFO] átugrani a nem létező erőforrástDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Változások észlelve - a modul újrafordítása!
[FIGYELMEZTETÉS] A fájlkódolás nincs beállítva, az UTF-8 platformkódolást használva, azaz a build is
platformfüggő!
[INFO] 1 forrásfájl fordítása a/Users/zak/_work/LearnBuildScripts/LearnMaven/fájlba
helloworld/target/class
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Helló Világ ---
[FIGYELMEZTETÉS] A platformkódolás (valójában UTF-8) használata a szűrt erőforrások másolásához, azaz
a build platformfüggő!
[INFO] átugrani a nem létező erőforrástDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Változások észlelve - a modul újrafordítása!
[FIGYELMEZTETÉS] A fájlkódolás nincs beállítva, az UTF-8 platformkódolást használva, azaz a build is
platformfüggő!
[INFO] 1 forrásfájl fordítása a/Users/zak/_work/LearnBuildScripts/LearnMaven mappába
/helloworld/target/teszt-osztályok
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: teszt (alapértelmezett teszt) @ helloworld ---
[INFO] Surefire jelentéskönyvtár:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
biztos jelentések
-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Com.comcanyname.helloworld.AppTest futtatása
Tesztek futása: 1, hibák: 0, hibák: 0, kihagyott: 0, eltelt idő: 0,014 mp
Eredmények :
A tesztek futnak: 1, hibák: 0, hibák: 0, kihagyva: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] Építőedény:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] SIKER ÉPÍTÉSE
[INFO] ----------------------------------------------- -------------------------
[INFO] Összes idő: 5,624 s
[INFO] Befejezés: 2018-01-27T00: 11: 10-08: 00
[INFO] Végső memória: 16M/114M
[INFO] ----------------------------------------------- -------------------------
A jar fájlt így futtathatja:
$ java -cp target/helloworld-1.0-PILLANATKÉP.befőttes üvegval vel.Cégnév.Helló Világ.KbHelló Világ!
A jar fájl a célmappába kerül.
Gradle
A Gradle egyesíti Hangya és Maven erejét. A Gradle első verziója 2012 -ben jelent meg. Gyors elfogadása történt. A Google jelenleg Android operációs rendszerhez használja.
Az XML helyett a Gradle a Groovy nyelvet használja. Ennek eredményeképpen a Gradle -ban épített szkriptek könnyebben írhatók és olvashatók. Kezdetben Ivy -t használt a függőségek kezelésére, de most saját függőségi motorját használja.
Előnyök
- Standardizálást biztosít, miközben rugalmas marad
- Könnyen olvasható és írható építési szkriptek
- Jobban kezeli a függőségek több verzióját
- Képes több programozási nyelv és technológia kezelésére
- Aktív közösség segíti az eszköz fejlesztését
- A Gradle DSL (tartományspecifikus nyelv) egyszerű konfigurációs felépítést tesz lehetővé
- A Gradle teljesítménynövelést biztosít fokozatos, gyorsítótár és a Gradle Daemon használatával
Hátrányok
- Az IDE integráció nem olyan jó, mint a Maven
Gradle példa
A Gradle -t innen telepítheti itt . Miután beállította a Gradle -t az útvonalon, ellenőrizheti azt:
$ gradle--változat-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------
Építési idő:2018-01-24 17: 04:52UTC
Felülvizsgálat: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Hangya: Apache Ant(TM)februárban összeállított 1.9.9 verzió2 2017.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Operációs rendszer: Mac OS X 10.11.6 x86_64
Ezután hozza létre a következő könyvtárszerkezetet:
Helló Világ| -épít.fokos
``-src
| -fő-
``-Jáva
``-Helló Világ
``-Helló Világ.Jáva
A helloworld.java esetében a kódot a hangya példából. A build.gradle esetében pedig írja be a következő kódot:
plugin alkalmazása: 'Jáva'változat= '1.0'
adattárak{
mavenCentral()
}
függőségek{
testCompile csoport: 'junit', név: 'junit', verzió: „4.12”
}
A gradle task – all parancs segítségével megtekintheti az összes rendelkezésre álló parancsot. A Gradle automatikusan felveszi a build.gradle fájlban megadott bővítményeket, és megmutatja a bővítmények miatt elérhető további feladatokat.
A konstrukciót futtatva érheti el:
$ gradle jarÉPÍT SIKERES 1 másodperc alatt
2végrehajtható feladatok:2végrehajtott
Az üveget így futtathatja:
$ java -cp build/libs/helloworld-1.0.befőttes üvegHelló VilágHelló Világ!
A jar fájl a build/libs mappába kerül.
Következtetés
Az építési eszközök közül az Ant hasznos lehet kisebb projektekhez, míg a Maven jobb annak biztosítására, hogy minden fejlesztő ugyanazokat a szabályokat kövesse. A Gradle a legújabb eszköz, amely a legnagyobb rugalmasságot biztosítja.
Hivatkozások:
- 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