Ant prieš Maven vs Gradle

Ant Vs Maven Vs Gradle



Kurdami programinę įrangą, kūrėjai turi vėl ir vėl atkurti tą patį kodą. Jie dažnai bando naudoti „bash“ scenarijus ar kitas scenarijų kalbas, kad automatizuotų užduotį. Tačiau yra kūrimo įrankių, kurie labiau tinka pastatų automatizavimui. Pagrindiniai statybos įrankiai yra šie:

Išsiaiškinkime įrankius, kad sužinotume daugiau.







„Apache Ant“ su „Ivy“

„Apache Ant“ yra „Java“ komandų eilutės įrankis, kuris naudoja XML failus kūrimo scenarijams apibrėžti. Jis daugiausia naudojamas „Java“ versijoms, bet taip pat gali būti naudojamas C/C ++ kūrimui. Integruotos užduotys suteikia galimybę surinkti, surinkti, išbandyti ir paleisti programines programas. Norėdami pagerinti „Ant“ funkcionalumą, vartotojai taip pat gali sukurti savo antilibus. „Apache Ivy“ yra priklausomybės valdymo priemonė, lengvai integruojama su „Ant“, kad būtų sukurta tvirtesnė ekosistema. „Ant“ kūrimas prasidėjo 2000 m.



Argumentai 'už'



  • Geresnis viso kūrimo proceso valdymas
  • Pakankamai lankstus dirbti su bet kokiu darbo procesu

Minusai





  • XML pagrindu sukurti failai gali išaugti ir būti neprižiūrimi
  • Kuriant scenarijus reikia daug laiko ir išteklių
  • IDE integraciją sunku pasiekti

Skruzdėlė su gebenėmis Pavyzdys

Galite įdiegti naujausią „Ant“ iš čia . Turite atsisiųsti ZIP failą, išplėsti ir įdėti šiukšliadėžės aplanką į savo kelią. Norėdami sužinoti, ar „Ant“ tinkamai įdiegta, galite naudoti šią komandą:

$ ant-versija
Apache Ant(TM)vasario mėnesį sudaryta 1.10.1 versija2 2017 m

Įdiegę „Ant“, galite atsisiųsti naujausią „Ivy“ stiklainį ir įdėti jį į „Lib“ aplanką „Ant“ kataloge.



Įdiegę „Ant“, sukurkite aplankus helloworld ir helloworld/src. Į aplanką src įdėkite failą helloworld.java su kodu:

/ **************************

Spausdina „Labas pasaulis!“

***************************

viešas klasėLabas pasauli{

viešas statinis tuštumapagrindinis( Styginė []args) {
Sistema .išeiti.println('Labas pasauli!');
}

}

Dabar aplanke helloworld sukurkite failą build.xml su šiuo kodu:

xmlns: gebenė='antlib: org.apache.ivy.ant' vardas='Labas pasauli' numatytas='stiklainis'>

vardas='src.dir' vertės='src'/>
vardas='build.dir' vertės='statyti'/>
vardas='class.dir' vertės=„$ {build.dir}/klasės“/>
vardas='am.dir' vertės=„$ {build.dir} / bin“/>
vardas='lib.dir' vertės='lib' />
id='lib.path.id'>
tau=„$ {lib.dir}“ />
>

vardas='išspręsti'>
/>
>

vardas='švarus'>
tau=„$ {build.dir}“/>
>

vardas='sudaryti' priklauso='išspręsti'>
tau=„$ {class.dir}“/>
srcdir=„$ {src.dir}“ destdir=„$ {class.dir}“ classpathref='lib.path.id'/>
>

vardas='stiklainis' priklauso='sudaryti'>
tau=„$ {bin.dir}“/>
sunaikinti=„$ {bin.dir}/$ {ant.project.name} .jar“ grindžiamas=„$ {class.dir}“/>
>

>

Tame pačiame „helloworld“ aplanke sukurkite failą „ivy.xml“ su šiuo kodu:

versija=„2.0“>
organizacija='org.apache' modulis='Labas pasauli'/>
>
org='junit' vardas='junit' rev=„4.12“/>
>
>

Katalogo struktūra turėtų atrodyti taip:

Labas pasauli
|- build.xml
| - gebenė.xml
`- src
`- helloworld.java

Dabar galite paleisti kūrimą naudodami komandą:

$antstiklainis

Sėkmingas kūrimas turėtų suteikti tokią išvestį:

$ skardinė
Sukurti failą: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

išspręsti:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: įkėlimo nustatymai :: 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] :: priklausomybių sprendimas :: org.apache#helloworld; [apsaugotas el. paštas]
„MacBook-Air“. Vietinė
[ivy: retrieve] confs: [numatytasis]
[ivy: retrieve] viešai rado junit#junit; 4.12
[ivy: retrieve] rasta org.hamcrest#hamcrest-core; 1.3 viešai
[ivy: retrieve] :: rezoliucijos ataskaita :: išspręsti 397 ms :: artefaktai dl 15ms
-------------------------------------------------- -------------------
| | moduliai || artefaktai |
| conf | skaičius | paieška | nuskriaustas | iškeldintas || skaičius | nuskendęs |
-------------------------------------------------- -------------------
| numatytasis | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: retrieving :: org.apache#helloworld
[ivy: retrieve] confs: [numatytasis]
[ivy: retrieve] 0 artefaktų nukopijuota, 4 jau gauti (0 KB/39 ms)

sudaryti:
[mkdir] Sukurtas rež:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klasės
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: įspėjimas:
'includeantruntime' nebuvo nustatytas, numatytasis build.sysclasspath = last; nustatytas kaip klaidingas
pakartojamoms konstrukcijoms
[javac] 1 šaltinio failo kompiliavimas į/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/class

stiklainis:
[mkdir] Sukurtas rež:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Statybos indas:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
labas pasaulis.jar

PASTATYTI SĖKMINGAI
Bendras laikas: 6 sekundės

Jar failą galite išbandyti taip:

$ java -cp build/bin/helloworld.stiklainisLabas pasauli
Labas pasauli!

Mes nustatėme jar failą, kuris turi būti dedamas į aplanką build/bin. Aplankai sukuriami kūrimo metu. „Ant jar“ komanda iškviečia stiklainio tikslą „build.xml“.

Maven

„Maven“ buvo sukurta siekiant išspręsti problemas, kylančias dėl „Ant“ pagrįstų scenarijų. Jame buvo saugomi XML failai, tačiau organizacija laikėsi kitokio požiūrio. „Ant“ kūrėjai turi sukurti visas užduotis. „Maven“ sumažina užduočių kūrimą, įgyvendindama griežtesnius kodo organizavimo standartus. Dėl to lengviau pradėti standartinius projektus.

Ji taip pat pristatė priklausomybės atsisiuntimus, kurie palengvino kūrimą. Prieš įdiegiant „Ivy“ skruzdėlėje, vartotojai turėjo valdyti priklausomybes vietoje. Mavenas pirmiausia priėmė priklausomybės valdymo filosofiją.

Tačiau dėl griežtų „Mavens“ standartų sunku rašyti pasirinktinius kūrimo scenarijus. Su šiuo įrankiu lengva dirbti tol, kol projektas atitinka griežtus standartus.

Argumentai 'už'

  • Automatinis priklausomybės atsisiuntimas
  • Visos priklausomybės automatiškai įrašomos į šaltinio valdiklį kaip „Maven“ scenarijų dalį
  • Standartizuoja ir supaprastina kūrimo procesą
  • Lengvai integruojamas su IDE ir CI/CD sistemomis

Minusai

  • Nėra lankstus kuriant pasirinktines darbo eigas
  • Staigi mokymosi kreivė ir procesas pradedantiesiems sunkiai suprantamas
  • Daug laiko užima sprendžiant kūrimo problemas ir naujas bibliotekų integracijas
  • Netinka su keliomis tos pačios priklausomybės versijomis

Maven pavyzdys

Naujausią „Maven“ galite atsisiųsti iš čia . Diegimą galite patikrinti taip:

$ mvn -versija
„Apache Maven“ 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017 m-10-18T00:58:13-07: 00)
„Maven“ pagrindinis puslapis: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
„Java“ versija: 1.8.0_74, pardavėjas: „Oracle Corporation“
Pagrindinis „Java“ puslapis: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Turinys/Pradžia/jre
Numatytoji lokalė: en_US, platformos kodavimas: UTF-8
OS pavadinimas:„mac os x“, versija:„10.11,6“, arka:„x86_64“, šeima:'mac'

Sukurkite „helloworld“ aplanką ir sukurkite projektą naudodami šią komandą:

$ mvn archetipas: generuoti -DgroupId = com.įmonės pavadinimas.Labas pasauli-DartifactId = sveikas pasaulis
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =klaidinga

Tai turėtų sukurti aplankų struktūrą ir sugeneruoti išvestį, kuri atrodo taip:

[INFO] Ieškomas projektas ...
[INFORMACIJA]
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFO] Pastato „Maven Stub“ projektas (Nr. POM) 1
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFORMACIJA]
[INFORMACIJA] >>> „maven-archetype-plugin“: 3.0.0: generuoti (numatytasis-cli)> generuoti šaltinius
@ savarankiškas-pom >>>
[INFORMACIJA]
[INFORMACIJA]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ autonominis-pom<<<
[INFORMACIJA]
[INFORMACIJA]
[INFO] --- maven-archetype-plugin: 3.0.0: generuoti (numatytasis-cli) @ standalone-pom ---
[INFO] Projekto generavimas paketiniu režimu
[INFORMACIJA] ----------------------------------------------- -----------------------------
[INFO] Naudojant šiuos parametrus kuriant projektą iš senojo (1.x) archetipo:
„maven-archetype-quickstart“: 1.0
[INFORMACIJA] ----------------------------------------------- -----------------------------
[INFO] Parametras: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametras: paketas, vertė: com.comįmonės pavadinimas.helloworld
[INFORMACIJA] Parametras: groupId, Value: com.compavadinimas.helloworld
[INFO] Parametras: artifactId, Value: helloworld
[INFO] Parametras: packageName, Value: com.compavadinimas.helloworld
[INFO] Parametras: versija, vertė: 1.0-SNAPSHOT
Projektas [INFO] sukurtas iš senojo (1.x) archetipo rež./Vartotojai/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFORMACIJA] KURTI SĖKMĘ
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFO] Bendras laikas: 8,602 s
[INFO] Baigta: 2018-01-27T00: 05: 37-08: 00
[INFO] Galutinė atmintis: 15M/152M
[INFORMACIJA] ----------------------------------------------- -------------------------

Aplanko struktūra turėtų atrodyti taip:

Labas pasauli
|- pom.xml
``- src
|- pagrindinis
| ``-java
| ``-- su
| ``- įmonės pavadinimas
| ``-- Labas pasauli
| ``- App.java
``-testas
``-java
``-- su
``- įmonės pavadinimas
``-- Labas pasauli
``- „AppTest.java“

Pom.xml yra kūrimo konfigūracijos. Pom.xml viduje kodas atrodo taip:

xmlns=„http://maven.apache.org/POM/4.0.0“ xmlns: xsi=„http://www.w3.org/2001/
„XMLSchema-instance“
xsi: schemaLocation=„http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.comįmonėspavadinimas.helloworld>
>Labas pasauli>
>stiklainis>
>1.0 SNAPSHOT>
>Labas pasauli>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>testas>
>
>
>

Jar failą galite sukurti naudodami šią komandą:

$ mvn paketas

[INFO] Ieškomas projektas ...
[INFORMACIJA]
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFO] Pastato „helloworld 1.0-SNAPSHOT“
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFORMACIJA]
[INFO] --- maven-resources-plugin: 2.6: ištekliai (numatytieji ištekliai) @ helloworld ---
[ĮSPĖJIMAS] Naudojant platformos kodavimą (iš tikrųjų UTF-8), norint nukopijuoti filtruotus išteklius, t.y.
konstrukcija priklauso nuo platformos!
[INFO] praleisti neegzistuojantį išteklių katalogą/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFORMACIJA]
[INFO] --- maven-compiler-plugin: 3.1: kompiliuoti (numatytasis kompiliavimas) @ helloworld ---
[INFO] Aptikti pakeitimai - modulio kompiliavimas iš naujo!
[ĮSPĖJIMAS] Failų kodavimas nenustatytas, naudojant platformos kodavimą UTF-8, t
priklauso nuo platformos!
[INFO] 1 šaltinio failo kompiliavimas į/Users/zak/_work/LearnBuildScripts/LearnMaven/
labas pasaulis/tikslas/klasės
[INFORMACIJA]
[INFO] --- maven-resources-plugin: 2.6: testResources (numatytasis-testResources) @
Labas pasauli ---
[ĮSPĖJIMAS] Naudojant platformos kodavimą (iš tikrųjų UTF-8), norint nukopijuoti filtruotus išteklius, t.y.
konstrukcija priklauso nuo platformos!
[INFO] praleisti neegzistuojantį išteklių katalogą/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFORMACIJA]
[INFORMACIJA] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Aptikti pakeitimai - modulio kompiliavimas iš naujo!
[ĮSPĖJIMAS] Failų kodavimas nenustatytas, naudojant platformos kodavimą UTF-8, t
priklauso nuo platformos!
[INFO] 1 šaltinio failo kompiliavimas į/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-class
[INFORMACIJA]
[INFORMACIJA] --- „maven-surefire“ papildinys: 2.12.4: testas (numatytasis testas) @ helloworld ---
[INFO] „Surefire“ ataskaitų katalogas:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
tikri pranešimai

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Vykdomas com.compavadinimas.helloworld.AppTest
Bandymai vykdomi: 1, nesėkmės: 0, klaidos: 0, praleista: 0, laikas praėjo: 0,014 sek.

Rezultatai:

Bandymai vykdomi: 1, nesėkmės: 0, klaidos: 0, praleista: 0

[INFORMACIJA]
[INFO] --- maven-jar-plugin: 2.4: jar (numatytasis jar) @ helloworld ---
[INFO] Statybos indas:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFORMACIJA] KURTI SĖKMĘ
[INFORMACIJA] ----------------------------------------------- -------------------------
[INFO] Bendras laikas: 5,624 s
[INFO] Baigta: 2018-01-27T00: 11: 10-08: 00
[INFO] Galutinė atmintis: 16M/114M
[INFORMACIJA] ----------------------------------------------- -------------------------

Jar failą galite paleisti taip:

$ java -cp target/helloworld-1.0-SNAPSHOT.stiklainissu.įmonės pavadinimas.Labas pasauli.App
Labas pasauli!

Indelio failas dedamas į tikslinį aplanką.

Gradle

„Gradle“ sujungia „Ant“ ir „Maven“ galią. Pirmoji „Gradle“ versija buvo išleista 2012 m. Ji buvo greitai priimta. Šiuo metu „Google“ jį naudoja „Android“ OS.

Vietoj XML „Gradle“ naudoja „Groovy“ kalbą. Todėl kurti scenarijus „Gradle“ yra lengviau rašyti ir skaityti. Iš pradžių priklausomybių valdymui jis naudojo „Ivy“, tačiau dabar jis naudoja savo priklausomybės variklį.

Argumentai 'už'

  • Suteikia standartizavimą ir išlieka lankstus
  • Lengva skaityti ir rašyti kūrimo scenarijus
  • Geriau tvarko kelias priklausomybių versijas
  • Geba valdyti kelias programavimo kalbas ir technologijas
  • Aktyvi bendruomenė, padedanti kurti įrankį
  • „Gradle DSL“ (domenui būdinga kalba) leidžia lengvai konfigūruoti
  • „Gradle“ teikia našumo patobulinimus palaipsniui, sukurdama talpyklą ir „Gradle Daemon“

Minusai

  • IDE integracija nėra tokia gera kaip „Maven“

Gradle pavyzdys

„Gradle“ galite įdiegti iš čia . Nustatę „Gradle“ savo kelyje, galite tai patikrinti:

$ gradle--versija

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

Statymo laikas:2018 m-01-24 17: 04:52UTC
Peržiūra: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Skruzdėlė: Apache Ant(TM)vasario mėnesį sudaryta 1.9.9 versija2 2017 m
BĮ: 1.8.0_74(„Oracle Corporation“25.74-b02)
OS: „Mac OS X 10.11.6 x86_64“

Tada sukurkite šią katalogo struktūrą:

Labas pasauli
| -statyti.gradle
``-src
| -pagrindinis
``-java
``-Labas pasauli
``-Labas pasauli.java

Dėl helloworld.java įdėkite kodą iš skruzdėlės pavyzdžio. „Build.gradle“ įveskite šį kodą:

taikyti papildinį: 'java'

versija= „1.0“

saugyklos{
mavenCentral()
}

priklausomybės{
testCompile grupė: 'junit', vardas: 'junit', versija: „4.12“
}

Galite naudoti „gradle“ užduotis - visa komanda, kad peržiūrėtumėte visas galimas komandas. „Gradle“ automatiškai paima faile build.gradle nurodytus papildinius ir parodo papildomas užduotis, kurias galima pasiekti dėl papildinių.

Sukurti galite paleidę:

$ gradle stiklainis

PASTATAS Sėkmingas per 1s
2vykdomos užduotys:2įvykdyta

Stiklainį galite paleisti taip:

$ java -cp build/libs/helloworld-1.0.stiklainisLabas pasauli
Labas pasauli!

Jar failas dedamas į aplanką build/libs.

Išvada

Tarp kūrimo įrankių „Ant“ gali būti naudingas mažesniems projektams, o „Maven“ yra geresnis siekiant įsitikinti, kad visi kūrėjai laikosi tų pačių taisyklių. „Gradle“ yra naujausias įrankis, suteikiantis didžiausią lankstumą.

Nuorodos: