Java

Ant vs Maven vs Gradle

Ant vs Maven vs Gradle

Izbira pravega orodja za gradnjo: Ant vs Maven vs Gradle

Med razvojem programske opreme morajo razvijalci vedno znova obnavljati isto kodo. Za avtomatizacijo naloge pogosto poskušajo uporabiti bash skripte ali druge skriptne jezike. Na voljo pa so orodja za gradnjo, ki so primernejša za avtomatizacijo gradnje. Prevladujoča orodja za gradnjo so:

Preučimo orodja, če želimo izvedeti več.

Apaški mrav z bršljanom

Apache Ant je orodje ukazne vrstice, ki temelji na Javi in ​​uporablja datoteke XML za definiranje skriptov gradnje. Uporablja se pretežno za gradnje Java, lahko pa se uporablja tudi za razvoj C / C ++. Vgrajene naloge ponujajo načine za prevajanje, sestavljanje, preizkušanje in zagon programskih aplikacij. Uporabniki lahko ustvarijo tudi lastne "antlibs", da izboljšajo funkcionalnost 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

Slabosti

Primer mravlje z bršljanom

Od tu lahko namestite najnovejšega Ant. Prenesti morate zip, razširiti in postaviti mapo bin na svojo pot. Če želite preveriti, ali je Ant pravilno nameščen, lahko uporabite naslednji ukaz:

$ ant -verzija
Apache Ant (TM) različica 1.10.1, sestavljeno 2. februarja 2017

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

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

/ **************************
Natisne "Hello World!"
*************************** /
javni razred helloworld
public static void main (String [] args)
Sistem.ven.println ("Pozdravljeni, svet!");

Zdaj v mapi helloworld ustvarite zgradbo.xml z naslednjo kodo:
























In v isti mapi helloworld ustvarite bršljan.xml z naslednjo kodo:






Struktura imenika bi morala izgledati tako:

Pozdravljen, svet
| - graditi.xml
| - bršljan.xml
'- src
'-- Pozdravljen, svet.java

Zdaj lahko gradite z ukazom:

$ kozarec mravlje

Uspešna gradnja bi morala zagotoviti takšne rezultate:

$ kozarec mravlje
Buildfile: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
razreši:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / bršljan / ::
[ivy: retrieve] :: nastavitve nalaganja :: url = jar: datoteka: / Users / zak / BuildTools / ANT / apache
-mravlja-1.10.1 / lib / bršljan-2.4.0.kozarec!/ org / apache / ivy / core / settings / ivysettings.xml
[ivy: retrieve] :: reševanje odvisnosti :: org.apache # helloworld; [e-pošta zaščitena]
MacBook-Air.lokalno
[ivy: retrieve] confs: [privzeto]
[bršljan: pridobi] najden junit # junit; 4.12 v javnosti
[bršljan: pridobi] najdeno org.hamcrest # hamcrest-core; 1.3 v javnosti
[bršljan: pridobi] :: poročilo o ločljivosti :: razreši 397ms :: artefakti dl 15ms
---------------------------------------------------------------------
| | moduli || predmeti |
| conf | številka | iskanje | dwnlded | deložiran || številka | dwnlded |
---------------------------------------------------------------------
| privzeto | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy: retrieve] :: retrieving :: org.apache # helloworld
[ivy: retrieve] confs: [privzeto]
[ivy: retrieve] 0 kopiranih artefaktov, 4 že pridobljenih (0kB / 39ms)
pripravi:
[mkdir] Ustvaren direktorij: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
razredih
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: opozorilo:
'includeantruntime' ni bil nastavljen, privzeto za izdelavo.sysclasspath = zadnji; nastavljeno na false
za ponovljive gradnje
[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] Zgradba jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Pozdravljen, svet.kozarec
ZGRADI USPEŠNO
Skupni čas: 6 sekund

Datoteko jar lahko preizkusite tako:

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

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

Maven

Maven je bil razvit za reševanje težav, ki jih povzroča skriptiranje na osnovi Ant. Hranil je datoteke XML, vendar je imel drugačen pristop k organizaciji. V programu Ant morajo razvijalci ustvariti vse naloge. Maven zmanjša ustvarjanje nalog z izvajanjem močnejših standardov za organiziranje kode. Posledično je lažje začeti s standardnimi projekti.

Uvedel je tudi prenose odvisnosti, ki so olajšali razvoj. Pred uvedbo Ivy v Ant so morali uporabniki odvisnosti upravljati lokalno. Maven je najprej sprejel filozofijo upravljanja odvisnosti.

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

Prednosti

Slabosti

Primer Maven

Najnovejši Maven lahko prenesete od tukaj. Namestitev lahko preverite takole:

$ mvn - različica
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Domača stran Maven: / 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 / Domov / jre
Privzeti jezik: 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: generiraj -DgroupId = com.ime podjetja.helloworld -DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Ustvariti mora strukturo map in ustvariti rezultat, ki je videti takole:

[INFO] Iskanje projektov…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Gradbeni projekt Maven Stub (brez POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generiraj (privzeto-kli)> generiraj-vire
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ samostojno-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generiraj (privzeto-cli) @ standalone-pom ---
[INFO] Ustvarjanje projekta v paketnem načinu
[INFO] ----------------------------------------------------------------------------
[INFO] Uporaba naslednjih parametrov za ustvarjanje projekta iz stare (1.x) Arhetip:
maven-arhetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Vrednost: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: paket, vrednost: com.ime podjetja.Pozdravljen, svet
[INFO] Parameter: groupId, vrednost: com.ime podjetja.Pozdravljen, svet
[INFO] Parameter: artifactId, vrednost: helloworld
[INFO] Parameter: packageName, vrednost: com.ime podjetja.Pozdravljen, svet
[INFO] Parameter: različica, vrednost: 1.0-SNAPSHOT
Projekt [INFO], ustvarjen iz Old (1.x) Arhetip v režiji: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] ZGRADI USPEH
[INFO] ------------------------------------------------------------------------
[INFO] Skupni čas: 8.602 s
[INFO] Končano ob: 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
| '- com
| '-- ime podjetja
| '-- Pozdravljen, svet
| '- App.java
'- test
'- java
'- com
'-- ime podjetja
'-- Pozdravljen, svet
'- AppTest.java

Pom.xml vsebuje konfiguracije gradnje. Znotraj pom.xml koda izgleda takole:

xsi: schemaLocation = "http: // maven.apache.org / POM / 4.0.0 http: // maven.apache.org / maven-v4_0
_0.xsd ">
4.0.0
com.ime podjetja.Pozdravljen, svet
Pozdravljen, svet
kozarec
1.0-SNAPSHOT
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] Zgradba helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: viri (privzeti viri) @ helloworld ---
[OPOZORILO] Uporaba kodiranja platforme (dejansko UTF-8) za kopiranje filtriranih virov, tj.e.
build je odvisen od platforme!
[INFO] preskoči neobstoječi resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: prevajanje (privzeto-prevajanje) @ helloworld ---
[INFO] Zaznane spremembe - ponovno sestavljanje modula!
[OPOZORILO] Kodiranje datotek ni nastavljeno s pomočjo kodiranja platforme UTF-8, tj.e. build je
odvisno od platforme!
[INFO] Sestavljanje 1 izvorne datoteke v / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / classes
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (privzeto-testResources) @
Pozdravljen, svet ---
[OPOZORILO] Uporaba kodiranja platforme (dejansko UTF-8) za kopiranje filtriranih virov, tj.e.
build je odvisen od platforme!
[INFO] preskoči neobstoječi resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (privzeto-testCompile) @ helloworld ---
[INFO] Zaznane spremembe - ponovno sestavljanje modula!
[OPOZORILO] Kodiranje datotek ni nastavljeno s pomočjo kodiranja platforme UTF-8, tj.e. build je
odvisno od platforme!
[INFO] Prevajanje 1 izvorne datoteke v / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 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
-------------------------------------------------------
Teče com.ime podjetja.Pozdravljen, svet.AppTest
Izvedeni testi: 1, napake: 0, napake: 0, preskočeni: 0, pretečeni čas: 0.014 sek
Rezultati:
Izvedenih preskusov: 1, napak: 0, napak: 0, preskočenih: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (privzeti kozarec) @ helloworld ---
[INFO] Zgradba jar: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.kozarec
[INFO] ------------------------------------------------------------------------
[INFO] ZGRADI USPEH
[INFO] ------------------------------------------------------------------------
[INFO] Skupni čas: 5.624 s
[INFO] Končano ob: 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.kozarec com.ime podjetja.Pozdravljen, svet.App
Pozdravljen, svet!

Datoteka jar se shrani v ciljno mapo.

Gradle

Gradle združuje moč Ant in Maven. Prva različica Gradle je izšla leta 2012. Hitro je bilo sprejeto. Google ga trenutno uporablja za Android OS.

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

Prednosti

Slabosti

Primer Gradle

Gradle lahko namestite od tukaj. Ko na svoji poti nastavite Gradle, ga lahko preverite tako:

$ gradle --verzija
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Čas izdelave: 2018-01-24 17:04:52 UTC
Revizija: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant (TM) različica 1.9.9, sestavljeno 2. februarja 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Nato ustvarite naslednjo strukturo imenika:

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

Za helloworld.java je postavila kodo iz primera Ant. In za gradnjo.gradle vnesite naslednjo kodo:

uporabi vtičnik: 'java'
version = '1.0 '
repozitoriji
mavenCentral ()

odvisnosti
testCompile group: 'junit', name: 'junit', version: '4.12 '

Za ogled vseh ukazov, ki so na voljo, lahko uporabite ukaz “gradle tasks -all”. Gradle samodejno prevzame vtičnike, ki ste jih določili v gradnji.gradle in vam pokaže dodatna opravila, ki so na voljo zaradi vtičnikov.

Zgradbo lahko dobite tako, da zaženete:

$ gradle kozarec
ZGRADI USPEŠNO v 1s
2 delujoči nalogi: 2 izvedeni

Svoj kozarec lahko zaženete tako:

$ java -cp build / libs / helloworld-1.0.kozarec helloworld
Pozdravljen, svet!

Datoteka jar se shrani v mapo build / libs.

Zaključek

Med orodji za gradnjo je Ant lahko koristen za manjše projekte, medtem ko je Maven boljši, če poskrbi, da vsi razvijalci upoštevajo ista pravila. Gradle je najnovejše orodje, ki zagotavlja največ prilagodljivosti.

Reference:

Vadnica Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider je dvanajsti dodatek k seriji Tomb Raider - franšiza akcijsko-pustolovskih iger, ki jo je ustvaril Eidos Montreal. Kritiki i...
Kako povečati FPS v Linuxu?
FPS pomeni Število sličic na sekundo. Naloga FPS je merjenje hitrosti sličic pri predvajanju video posnetkov ali igranih predstavah. Z enostavnimi bes...
Najboljše laboratorijske igre Oculus App
Če ste lastnik slušalk Oculus, morate biti seznanjeni s stranskim nalaganjem. Sideloading je postopek namestitve vsebine, ki ni shranjena v slušalke. ...