Hangya vs Maven vs Gradle

Ant Vs Maven Vs Gradle



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:

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áltozat
Apache 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:

xmlns: borostyán='antlib: org.apache.ivy.ant' név='Helló Világ' alapértelmezett='befőttes üveg'>

név='src.dir' érték='src'/>
név='build.dir' érték='épít'/>
név='class.dir' érték='$ {build.dir}/osztályok'/>
név='am.dir' érték='$ {build.dir} / bin'/>
név='lib.dir' érték='lib' />
id='lib.path.id'>
neked='$ {lib.dir}' />
>

név='elhatározás'>
/>
>

név='tiszta'>
neked='$ {build.dir}'/>
>

név='összeállítás' attól függ='elhatározás'>
neked='$ {class.dir}'/>
srcdir='$ {src.dir}' destdir='$ {class.dir}' classpathref='lib.path.id'/>
>

név='befőttes üveg' attól függ='összeállítás'>
neked='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' alapú='$ {class.dir}'/>
>

>

És ugyanabban a helloworld mappában hozza létre az ivy.xml fájlt a következő kóddal:

változat='2.0'>
szervezet='org.apache' modul='Helló Világ'/>
>
org='junit' név='junit' fordulat=„4.12”/>
>
>

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 üveg

A sikeres építésnek az alábbi kimenetet kell biztosítania:

$ hangyasor
Buildfile: /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ág
Helló 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:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi=„http://www.w3.org/2001/
XMLSchema-példány '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.comcégnév.helloworld>
>Helló Világ>
>befőttes üveg>
>1.0-SNAPSHOT>
>Helló Világ>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>teszt>
>
>
>

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.Kb
Helló 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ág
Helló 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: