Mrav proti Mavenu proti Gradlu

Ant Vs Maven Vs Gradle



Med razvojem programske opreme morajo razvijalci vedno znova obnavljati isto kodo. Pogosto poskušajo avtomatizirati nalogo z uporabo bash skriptov ali drugih skriptnih jezikov. Na voljo pa so orodja za gradnjo, ki so primernejša za avtomatizacijo gradnje. Prevladujoča orodja za gradnjo so:

Raziščimo orodja, če želimo izvedeti več.







Apache Ant z Ivy

Apache Ant je orodje ukazne vrstice, ki temelji na Javi in ​​uporablja datoteke XML za definiranje skriptov gradnje. Uporablja se predvsem za gradnjo Jave, lahko pa tudi za razvoj C/C ++. Vgrajene naloge ponujajo načine za sestavljanje, sestavljanje, testiranje in zagon programskih aplikacij. Uporabniki lahko ustvarijo tudi lastne antlibe za izboljšanje funkcionalnosti Ant. Apache Ivy je orodje za upravljanje odvisnosti, ki se zlahka poveže z Antom in tako zagotovi močnejši ekosistem. Razvoj Ant se je začel leta 2000.



Prednosti



  • Boljši nadzor nad celotnim procesom gradnje
  • Dovolj prilagodljiv za delo s katerim koli delovnim procesom

Slabosti





  • Datoteke za gradnjo, ki temeljijo na XML, lahko postanejo velike in jih ni mogoče vzdrževati
  • Za vzdrževanje skriptov za izdelavo je potrebno veliko časa in sredstev
  • Integracijo IDE je težko doseči

Primer mravlje z bršljanom

Najnovejši Ant lahko namestite iz tukaj . Morate prenesti zip, razširiti in postaviti mapo bin na svojo pot. Če želite preveriti, ali je Ant pravilno nameščen, uporabite naslednji ukaz:

$ ant-verzija
Apache Ant(TM)različica 1.10.1, sestavljena februarja2 2017

Ko namestite Ant, lahko prenesete najnovejši kozarec Ivy in ga vstavite v mapo lib v imeniku Ant.



Ko namestite Ant, ustvarite mape helloworld in helloworld/src. V mapo src vstavite datoteko helloworld.java s kodo:

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

Natisne 'Hello World!'

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

javno razredPozdravljen, svet{

javno statična ničnoglavni( Vrvica []args) {
Sistem .ven.println('Pozdravljen, svet!');
}

}

Zdaj v mapi helloworld ustvarite datoteko build.xml z naslednjo kodo:

xmlns: bršljan='antlib: org.apache.ivy.ant' ime='Pozdravljen, svet' privzeto='kozarec'>

ime='src.dir' vrednost='src'/>
ime='build.dir' vrednost='zgraditi'/>
ime='classes.dir' vrednost='$ {build.dir}/predavanja'/>
ime='am.dir' vrednost='$ {build.dir} / bin'/>
ime='lib.dir' vrednost='lib' />
id='lib.path.id'>
tebi='$ {lib.dir}' />
>

ime='rešiti'>
/>
>

ime='čisto'>
tebi='$ {build.dir}'/>
>

ime='sestavi' odvisno='rešiti'>
tebi='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' classpathref='lib.path.id'/>
>

ime='kozarec' odvisno='sestavi'>
tebi='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

V isti mapi helloworld ustvarite datoteko ivy.xml z naslednjo kodo:

različico='2.0'>
organizacijo='org.apache' modul='Pozdravljen, svet'/>
>
org='junit' ime='junit' rev='4.12'/>
>
>

Struktura imenika bi morala izgledati tako:

Pozdravljen, svet
|- gradnja.xml
| - bršljan.xml
`- src
`- helloworld.java

Zdaj lahko zaženete gradnjo z ukazom:

$Mravljakozarec

Uspešna gradnja bi morala zagotoviti takšen rezultat:

kozarec $ ant
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

rešiti:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: nastavitve nalaganja :: url = jar: datoteka:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: reševanje odvisnosti :: org.apache#helloworld; [zaščiteno po e -pošti]
MacBook-Air.local
[ivy: retrieve] confs: [privzeto]
[ivy: retrieve] v javnosti je bil najden junit#junit; 4.12
[ivy: retrieve] najden org.hamcrest#hamcrest-core; 1.3 v javnosti
[ivy: retrieve] :: poročilo o reševanju :: razrešitev 397ms :: artefakti dl 15ms
-------------------------------------------------- -------------------
| | moduli || artefakti |
| conf | številka | iskanje | dwnlded | izseljen || število | dwnlded |
-------------------------------------------------- -------------------
| privzeto | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: pridobivanje :: org.apache#helloworld
[ivy: retrieve] confs: [privzeto]
[ivy: retrieve] 0 kopiranih artefaktov, 4 že pridobljenih (0kB/39ms)

sestaviti:
[mkdir] Ustvarjen direktorij:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
razredov
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: opozorilo:
'includeantruntime' ni bil nastavljen, privzeto je bil build.sysclasspath = last; nastavljeno na false
za ponovljive zgradbe
[javac] Prevajanje 1 izvorne datoteke v/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes

kozarec:
[mkdir] Ustvarjen direktorij:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Kozarec za gradnjo:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

GRADITI USPEŠNO
Skupni čas: 6 sekund

Datoteko jar lahko preizkusite tako:

$ java -cp build/bin/helloworld.kozarecPozdravljen, svet
Pozdravljen, svet!

Določili smo datoteko jar, ki jo bomo dali v mapo build/bin. Mape se ustvarijo med gradnjo. Ukaz ant jar pokliče cilj jar v build.xml.

Maven

Maven je bil razvit za reševanje težav, ki se pojavljajo pri skriptiranju na osnovi Mrav. Hranil je datoteke XML, vendar je imel drugačen pristop k organizaciji. V Antu morajo razvijalci ustvariti vsa opravila. Maven zmanjšuje ustvarjanje nalog z uvedbo strožjih standardov za organizacijo kode. Posledično je lažje začeti s standardnimi projekti.

Uvedel je tudi prenos odvisnosti, kar je olajšalo razvoj. Pred uvedbo Ivyja v Antu so morali uporabniki lokalno upravljati odvisnosti. Maven je najprej sprejel filozofijo upravljanja odvisnosti.

Vendar strogi standardi Mavensa otežujejo pisanje skriptov za izdelavo po meri. Z orodjem je enostavno delati, če projekt sledi strogim standardom.

Prednosti

  • Samodejni prenosi odvisnosti
  • Vse odvisnosti se samodejno zabeležijo v nadzoru vira kot del skript Maven
  • Standardizira in poenostavi postopek izdelave
  • Enostavno se integrira z IDE in CI/CD sistemi

Slabosti

  • Pri ustvarjanju delovnih tokov po meri ni prilagodljiv
  • Začetniki težko razumejo strmo krivuljo učenja in proces
  • Za reševanje težav pri gradnji in novih knjižničnih integracijah je potrebno veliko časa
  • Ni dobro z več različicami iste odvisnosti

Primer Maven

Najnovejšo različico programa Maven lahko prenesete s spletnega mesta tukaj . Namestitev lahko preverite tako:

$ mvn --verzija
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Maven home: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Različica Java: 1.8.0_74, prodajalec: Oracle Corporation
Domača stran Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Vsebina/Domača stran/jre
Privzeta področna nastavitev: en_US, kodiranje platforme: UTF-8
Ime OS:'mac os x', različica:'10 .11.6 ', lok:'x86_64', družina:'mac'

Ustvarite mapo helloworld in ustvarite projekt z naslednjim ukazom:

$ mvn arhetip: ustvari -DgroupId = com.ime podjetja.Pozdravljen, svet-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =napačno

Ustvariti mora strukturo map in ustvariti izhod, ki izgleda takole:

[INFO] Iskanje projektov ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Gradnja projekta Maven Stub (brez POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generiraj (default-cli)> generiraj-vire
@ samostojni pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ samostojni-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: ustvari (default-cli) @ standalone-pom ---
[INFO] Ustvarjanje projekta v paketnem načinu
[INFO] ----------------------------------------------- -----------------------------
[INFO] Uporaba naslednjih parametrov za ustvarjanje projekta iz starega (1.x) arhetipa:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameter: basedir, Vrednost:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: paket, Vrednost: com.companyname.helloworld
[INFO] Parameter: groupId, Vrednost: com.companyname.helloworld
[INFO] Parameter: artifactId, Value: helloworld
[INFO] Parameter: packageName, Value: com.companyname.helloworld
[INFO] Parameter: različica, vrednost: 1,0-SNAPSHOT
[INFO] projekt, ustvarjen iz starega (1.x) arhetipa v direktoriju:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] ZGRADITE USPEH
[INFO] ----------------------------------------------- -------------------------
[INFO] Skupni čas: 8.602 s
[INFO] Končano: 2018-01-27T00: 05: 37-08: 00
[INFO] Končni pomnilnik: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Struktura map bi morala izgledati tako:

Pozdravljen, svet
|- pom.xml
''- src
|- glavni
| ''-java
| ''- s
| ''-- ime podjetja
| ''-- Pozdravljen, svet
| ''- App.java
''-preskus
''-java
''- s
''-- ime podjetja
''-- Pozdravljen, svet
''- AppTest.java

Pom.xml vsebuje konfiguracije gradnje. Koda v pom.xml izgleda tako:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-primerek '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>Pozdravljen, svet>
>kozarec>
>1,0-SNAPHOT>
>Pozdravljen, svet>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>preskus>
>
>
>

Datoteko jar lahko ustvarite z naslednjim ukazom:

$ mvn paket

[INFO] Iskanje projektov ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Gradnja helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- vtičnik maven-resources: 2.6: viri (privzeti viri) @ helloworld ---
[OPOZORILO] Uporaba kodiranja platforme (dejansko UTF-8) za kopiranje filtriranih virov, tj.
gradnja je odvisna od platforme!
[INFO] preskočite neobstoječi resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: prevajaj (privzeto-prevajaj) @ helloworld ---
[INFO] Zaznane spremembe - ponovno sestavljanje modula!
[OPOZORILO] Kodiranje datotek ni bilo nastavljeno z uporabo kodiranja platforme UTF-8, tj
odvisno od platforme!
[INFO] Prevajanje 1 izvorne datoteke v/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/target/classes
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Pozdravljen, svet ---
[OPOZORILO] Uporaba kodiranja platforme (dejansko UTF-8) za kopiranje filtriranih virov, tj.
gradnja je odvisna od platforme!
[INFO] preskočite neobstoječi resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Zaznane spremembe - ponovno sestavljanje modula!
[OPOZORILO] Kodiranje datotek ni bilo nastavljeno z uporabo kodiranja platforme UTF-8, tj
odvisno od platforme!
[INFO] Prevajanje 1 izvorne datoteke v/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[INFO]
[INFO] --- vtičnik maven-surefire: 2.12.4: test (privzeti test) @ helloworld ---
[INFO] Imenik poročil Surefire:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
zanesljiva poročila

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Izvajanje com.companyname.helloworld.AppTest
Preizkusi: 1, napake: 0, napake: 0, preskočeno: 0, pretekel čas: 0,014 s

Rezultati:

Preizkusi: 1, napake: 0, napake: 0, preskočeno: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (privzeto-jar) @ helloworld ---
[INFO] Kozarec za gradnjo:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] ZGRADITE USPEH
[INFO] ----------------------------------------------- -------------------------
[INFO] Skupni čas: 5.624 s
[INFO] Končano: 2018-01-27T00: 11: 10-08: 00
[INFO] Končni pomnilnik: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Datoteko jar lahko zaženete tako:

$ java -cp target/helloworld-1,0-SNAPSHOT.kozarecz.ime podjetja.Pozdravljen, svet.Aplikacija
Pozdravljen, svet!

Datoteka jar je postavljena v ciljno mapo.

Gradle

Gradle združuje moč Ant in Maven. Prva različica Gradle je izšla leta 2012. Prišlo je do hitrega uvajanja. Google ga trenutno uporablja za Android OS.

Namesto XML Gradle uporablja jezik Groovy. Posledično je gradbene skripte v Gradleju lažje pisati in brati. Sprva je za upravljanje odvisnosti uporabljal Ivy, zdaj pa uporablja svoj motor odvisnosti.

Prednosti

  • Zagotavlja standardizacijo, hkrati pa ostaja prilagodljiv
  • Enostavno branje in pisanje skriptov za gradnjo
  • Boljše pri obravnavi več različic odvisnosti
  • Sposoben je obdelati več programskih jezikov in tehnologij
  • Aktivna skupnost pomaga pri razvoju orodja
  • Gradle DSL (Domain-Specific Language) omogoča preprosto konfiguracijsko strukturo
  • Gradle zagotavlja izboljšave zmogljivosti z uporabo postopnega vgrajevanja predpomnilnika in demona Gradle

Slabosti

  • Integracija IDE ni tako dobra kot Maven

Primer Gradle

Gradle lahko namestite iz tukaj . Ko nastavite Gradle na svoji poti, jo lahko preverite tako:

$ gradle--verzija

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

Čas izdelave:2018-01-24 17: 04:52UTC
Revizija: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Mravlja: Apache Ant(TM)različica 1.9.9, sestavljena februarja2 2017
JVM: 1.8.0_74(Korporacija Oracle25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Nato ustvarite naslednjo strukturo imenikov:

Pozdravljen, svet
| -graditi.gradle
''-src
| -glavni
''-java
''-Pozdravljen, svet
''-Pozdravljen, svet.java

Za helloworld.java vnesite kodo iz primera Ant. In za build.gradle vnesite naslednjo kodo:

uporabi vtičnik: 'java'

različico= '1,0'

skladišča{
mavenCentral()
}

odvisnosti{
testCompile group: 'junit', ime: 'junit', različica: '4.12'
}

Za ogled vseh razpoložljivih ukazov lahko uporabite gradle opravila - vse ukaze. Gradle samodejno pobere vtičnike, ki jih navedete v datoteki build.gradle, in prikaže dodatne naloge, ki so na voljo zaradi vtičnikov.

Zgradbo lahko dobite tako, da zaženete:

$ gradle kozarec

ZGRADI USPEŠNO v 1 s
2dejanja, ki jih je mogoče izvesti:2izvršeno

Kozarec lahko zaženete tako:

$ java -cp build/libs/helloworld-1,0.kozarecPozdravljen, svet
Pozdravljen, svet!

Datoteka jar je shranjena v mapi build/libs.

Zaključek

Med orodji za sestavljanje je Ant lahko uporaben za manjše projekte, medtem ko je Maven boljši za zagotovitev, da vsi razvijalci upoštevajo enaka pravila. Gradle je najnovejše orodje, ki zagotavlja največjo prilagodljivost.

Reference: