Maur vs maven vs gradle

Maur vs maven vs gradle

Velge riktig byggeverktøy: ANT vs Maven vs Gradle

Under programvareutvikling må utviklere gjenoppbygge den samme koden om og om igjen. De prøver ofte å bruke bashskript eller andre skriptspråk for å automatisere oppgaven. Imidlertid er det tilgjengelige byggverktøy som er mer passende for byggautomatisering. De dominerende byggeverktøyene er:

  • Apache Ant med eføy
  • Maven
  • Gradle

La oss undersøke verktøyene for å finne ut mer.

Apache Ant med eføy

Apache Ant er et Java-basert kommandolinjeverktøy som bruker XML-filer for å definere build-skript. Det er hovedsakelig brukt til Java Builds, men det kan også brukes til C/C ++ utvikling. Innebygde oppgaver gir måter å samle, montere, teste og kjøre programvareapplikasjoner. Brukere kan også lage sine egne "antlibs" for å forbedre funksjonaliteten til ANT. Apache Ivy er et avhengighetsstyringsverktøy som integreres enkelt med ANT for å gi et mer robust økosystem. Utviklingen av maur startet i 2000.

Fordeler

  • Bedre kontroll over den samlede byggeprosessen
  • Fleksibel nok til å jobbe med enhver arbeidsprosess

Ulemper

  • XML -baserte byggefiler kan bli store og uminnelige
  • Mye tid og ressurser er nødvendige for å opprettholde byggeskriptene
  • IDE -integrasjon er vanskelig å oppnå

Maur med eføyeksemplet

Du kan installere den siste mauren herfra. Du må laste ned ZIP, utvide og sette søppelmappen i banen din. Du kan bruke følgende kommando for å se om Ant er installert riktig:

$ Ant -Versjon
Apache Ant (TM) versjon 1.10.1 samlet 2. februar 2017

Når du har installert Ant, kan du laste ned den nyeste Ivy Jar og legge den i Lib -mappen i Ant Directory.

Etter at du har installert maur, lag mapper helloworld og helloworld/src. Inne i SRC -mappen, legg Helloworld.Java -fil med koden:

/*************************
Skriver ut "Hello World!""
***************************/
offentlig klasse HelloWorld
public static void main (String [] args)
System.ute.Println ("Hello World!");

Nå i Helloworld -mappen opprette en build.XML -fil med følgende kode:
























Og i den samme helloworld -mappen, lag Ivy.XML -fil med følgende kode:






Katalogstrukturen skal se slik ut:

Hei Verden
|- Bygg.XML
|- eføy.XML
'- Src
'-- Hei Verden.Java

Nå kan du kjøre bygningen med kommandoen:

$ maurkrukke

En vellykket bygning bør gi output som dette:

$ maurkrukke
BuildFile:/Brukere/ZAK/_Work/LearnBuildScripts/Learnant/Helloworld/Build.XML
Løse:
[Ivy: Hent] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.Apache.org/ eføy/ ::
[Ivy: Hent] :: Lasting Innstillinger :: URL = Jar: Fil:/Brukere/Zak/BuildTools/ANT/Apache
-Ant-1.10.1/lib/Ivy-2.4.0.krukke!/org/apache/eføy/kjerne/innstillinger/ivysettings.XML
[Ivy: Hent] :: Løsningsavhengigheter :: Org.Apache#Helloworld; Working@Zakirs-
MacBook-Air.lokal
[Ivy: Hent] Confs: [Standard]
[Ivy: Hent] Fant Junit#Junit; 4.12 offentlig
[eføy: hente] funnet org.Hamcrest#Hamcrest-core; 1.3 i offentligheten
[Ivy: Hent] :: Oppløsningsrapport :: Løs 397MS :: Artifacts DL 15ms
---------------------------------------------------------------------
| | moduler || gjenstander |
| Conf | nummer | Søk | dwnlded | Utkastet || nummer | dwnlded |
---------------------------------------------------------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[eføy: hente] :: henting :: org.Apache#Helloworld
[Ivy: Hent] Confs: [Standard]
[eføy: hente] 0 gjenstander kopiert, 4 allerede hentet (0kb/39ms)
kompilere:
[mkdir] opprettet dir:/brukere/zak/_work/learnbuildscripts/learning/helloworld/build/
klasser
[Javac]/Brukere/ZAK/_Work/LearnBuildScripts/Learnant/Helloworld/Build.XML: 22: Advarsel:
'Includeantruntime'was ikke satt, misligholdt å bygge.SysClassPath = sist; satt til falsk
for repeterbare bygg
[Javac] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/lærere/
Helloworld/build/klasser
krukke:
[mkdir] opprettet dir:/brukere/zak/_work/learnbuildscripts/learnant/helloworld/build/bin
[krukke] Building Jar:/Brukere/ZAK/_Work/LearnBuildScripts/Learning/Helloworld/build/bin/
Hei Verden.krukke
Bygg vellykket
Total tid: 6 sekunder

Du kan prøve ut JAR -filen slik:

$ java -cp build/bin/helloworld.Jar Helloworld
Hei Verden!

Vi har definert JAR -filen som skal legges i Build/Bin -mappen. Mappene blir opprettet under byggingen. Ant JAR -kommandoen kaller krukke -målet i byggingen.XML.

Maven

Maven ble utviklet for å løse problemene med myrbasert skripting. Det holdt XML -filene, men tok en annen tilnærming til organisasjonen. I maur må utviklere lage alle oppgavene. Maven reduserer oppgaveopprettelsen ved å implementere sterkere standarder for organisering av kode. Som et resultat er det lettere å komme i gang med standardprosjekter.

Det introduserte også nedlastinger av avhengigheter som gjorde utviklingen enklere. Før introduksjonen av eføy i Ant, måtte brukere administrere avhengigheter lokalt. Maven vedtok Filosofi fra avhengighetsledelse først.

Imidlertid gjør mavens strenge standarder det vanskelig å skrive tilpassede byggeskript. Verktøyet er enkelt å jobbe med så lenge prosjektet følger de strenge standardene.

Fordeler

  • Nedlastinger av automatisk avhengighet
  • Alle avhengigheter blir automatisk registrert i kildekontroll som en del av Maven -skriptene
  • Standardiserer og forenkler byggeprosessen
  • Integreres enkelt med IDE -er og CI/CD -systemer

Ulemper

  • Ikke fleksibel i å lage tilpassede arbeidsflyter
  • Bratt læringskurve og prosessen er vanskelig for nybegynnere å forstå
  • Tidkrevende for å løse byggproblemer og nye bibliotekintegrasjoner
  • Ikke bra med flere versjoner av samme avhengighet

Maven eksempel

Du kan laste ned den siste Maven herfra. Du kan sjekke installasjonen slik:

$ MVN -Versjon
Apache Maven 3.5.2 (138Edd61fd100EC658BFA2D307C43B76940A5D7D; 2017-10-18T00: 58: 13-07: 00)
Maven Home:/Brukere/Zak/Buildtools/Maven/Apache-Maven-3.5.2
Java versjon: 1.8.0_74, leverandør: Oracle Corporation
Java Home:/Library/Java/JavavirtualMachines/JDK1.8.0_74.JDK/Innhold/Hjem/JRE
Standard lokalisering: EN_US, plattformkoding: UTF-8
OS Navn: "Mac OS X", versjon: "10.11.6 ", Arch:" X86_64 ", familie:" Mac "

Lag en Helloworld -mappe og generer et prosjekt med følgende kommando:

$ MVN arketype: generere -dgroupid = com.selskapsnavn.HelloWorld -DartifactId = Helloworld
-DarChetypeArtIfactId = Maven-Arcetype-QuickStart -Dinteractivemode = FALSE

Den skal lage mappestrukturen og generere utgangen som ser slik ut:

[Info] Skanning etter prosjekter ..
[Info]
[Info] ------------------------------------------------------------------------
[Info] Building Maven Stub Project (No POM) 1
[Info] ------------------------------------------------------------------------
[Info]
[Info] >>> Maven-Archetype-Plugin: 3.0.0: generere (standard-cli)> generere kilder
@ standalone-pom >>>
[Info]
[Info] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ frittstående-pom <<<
[Info]
[Info]
[Info] --- Maven-Archetype-Plugin: 3.0.0: generere (standard-cli) @ standalone-pom ---
[Info] Generere prosjekt i batchmodus
[Info] ----------------------------------------------------------------------------
[Info] Bruke følgende parametere for å lage prosjekt fra gammelt (1.x) Arketype:
Maven-Archetype-Quickstart: 1.0
[Info] ----------------------------------------------------------------------------
[Info] Parameter: Basertir, verdi:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven
[Info] Parameter: Pakke, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: GroupID, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: Artefaktid, verdi: Helloworld
[Info] Parameter: packagename, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: versjon, verdi: 1.0-SNAPSHOT
[Info] prosjekt opprettet fra gammelt (1.x) arketype i dir:/brukere/zak/_arbeid/
LearnBuildScripts/LearnMaven/Helloworld
[Info] ------------------------------------------------------------------------
[Info] Bygg suksess
[Info] ------------------------------------------------------------------------
[Info] Total tid: 8.602 s
[Info] Ferdig på: 2018-01-27T00: 05: 37-08: 00
[Info] Endelig minne: 15m/152m
[Info] ------------------------------------------------------------------------

Mappestrukturen skal se slik ut:

Hei Verden
|- Pom.XML
'- Src
|- Hoved
| '- Java
| '- com
| '-- selskapsnavn
| '-- Hei Verden
| '- App.Java
'- Test
'- Java
'- com
'-- selskapsnavn
'-- Hei Verden
'- AppTest.Java

POM.XML inneholder byggekonfigurasjonene. Inne i pom.XML koden ser slik ut:

XSI: schemalocation = "http: // maven.Apache.org/pom/4.0.0 http: // maven.Apache.org/maven-v4_0
_0.XSD ">
4.0.0
com.selskapsnavn.Hei Verden
Hei Verden
krukke
1.0-SNAPSHOT
Hei Verden
http: // maven.Apache.org


junit
junit
3.8.1
test


Du kan generere JAR -filen ved å bruke følgende kommando:

$ MVN -pakke
[Info] Skanning etter prosjekter ..
[Info]
[Info] ------------------------------------------------------------------------
[Info] Building Helloworld 1.0-SNAPSHOT
[Info] ------------------------------------------------------------------------
[Info]
[Info] --- Maven-resource-plugin: 2.6: Ressurser (standard-ressurser) @ Helloworld ---
[Advarsel] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, i.e.
Bygg er plattformavhengig!
[Info] Hopp over ikke -eksisterende RESOURCEDIRECTORY/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven/
Helloworld/SRC/Main/Resources
[Info]
[Info] --- Maven-Compiler-Plugin: 3.1: kompilere (standardkompil) @ helloworld ---
[Info] Endringer oppdaget - Omkompilering av modulen!
[Advarsel] Filkoding er ikke satt, ved hjelp av plattformkoding av UTF-8, i.e. Bygg er
plattformavhengig!
[Info] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/learnmaven/
Helloworld/mål/klasser
[Info]
[Info] --- Maven-resource-plugin: 2.6: TestResources (standard-testresources) @
Hei Verden ---
[Advarsel] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, i.e.
Bygg er plattformavhengig!
[Info] Hopp over ikke -eksisterende RESOURCEDIRECTORY/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven/
HelloWorld/SRC/Test/Resources
[Info]
[Info] --- Maven-Compiler-Plugin: 3.1: TestCompile (Standard-testCompile) @ Helloworld ---
[Info] Endringer oppdaget - Omkompilering av modulen!
[Advarsel] Filkoding er ikke satt, ved hjelp av plattformkoding av UTF-8, i.e. Bygg er
plattformavhengig!
[Info] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/learnmaven
/helloworld/mål/testklasse
[Info]
[Info] --- Maven-Surefire-Plugin: 2.12.4: test (standardtest) @ helloworld ---
[Info] Surefire Report Directory:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven
/helloworld/mål/
Surefire-rapporter
-------------------------------------------------------
T e s t s
-------------------------------------------------------
Kjører com.selskapsnavn.Hei Verden.AppTest
Tester kjøres: 1, feil: 0, feil: 0, hoppet over: 0, tid går: 0.014 sek
Resultater:
Tester kjøres: 1, feil: 0, feil: 0, hoppet over: 0
[Info]
[Info] --- Maven-Jar-Plugin: 2.4: krukke (standard-jar) @ helloworld ---
[Info] Building Jar:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven/Helloworld/Target/
Helloworld-1.0-SNAPSHOT.krukke
[Info] ------------------------------------------------------------------------
[Info] Bygg suksess
[Info] ------------------------------------------------------------------------
[Info] Total tid: 5.624 s
[Info] Ferdig kl: 2018-01-27T00: 11: 10-08: 00
[Info] Endelig minne: 16m/114m
[Info] ------------------------------------------------------------------------

Du kan kjøre JAR -filen slik:

$ Java -CP Target/Helloworld -1.0-SNAPSHOT.krukke com.selskapsnavn.Hei Verden.App
Hei Verden!

JAR -filen settes i målmappen.

Gradle

Gradle kombinerer myrens kraft og maven. Den første versjonen av Gradle ble utgitt i 2012. Det har sett rask adopsjon. Google bruker for tiden for Android OS.

I stedet for XML bruker Gradle det groovy språket. Som et resultat er byggskript i Gradle lettere å skrive og lese. Den brukte opprinnelig eføy for avhengighetsstyring, men den bruker sin egen avhengighetsmotor nå.

Fordeler

  • Gir standardisering mens du holder deg fleksibel
  • Lett å lese og skrive build manus
  • Bedre til å håndtere flere versjoner av avhengigheter
  • I stand til å håndtere flere programmeringsspråk og teknologier
  • Aktivt samfunn som hjelper til med å utvikle verktøyet
  • Gradle DSL (domenespesifikt språk) gjør det til enkel konfigurasjonsstruktur
  • Gradle gir ytelsesforbedringer ved bruk av trinnvis, bygg cache og gradle -demonet

Ulemper

  • IDE -integrasjon ikke så bra som Maven

Gradle -eksempel

Du kan installere Gradle herfra. Når du har satt opp Gradle i din vei, kan du sjekke den med:

$ Gradle -Versjon
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Bygg tid: 2018-01-24 17:04:52 UTC
Revisjon: 77D0EC90636F43669DC794CA17EF80DD65457BEC
Groovy: 2.4.12
Maur: Apache Ant (TM) versjon 1.9.9 samlet 2. februar 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-B02)
OS: Mac OS x 10.11.6 x86_64

Neste, lag følgende katalogstruktur:

Hei Verden
|- Bygg.gradle
'- Src
|- Hoved
'- Java
'-- Hei Verden
'-- Hei Verden.Java

For Helloworld.Java satte koden fra maureksemplet. Og for bygg.Graden lagt inn følgende kode:

Bruk plugin: 'Java'
versjon = '1.0 '
depoter
mavencentral ()

avhengigheter
TestCompile Group: 'Junit', navn: 'Junit', versjon: '4.12 '

Du kan bruke “Gradle Tasks -Ald” -kommando for å se på alle tilgjengelige kommandoer. Gradle henter automatisk plugins du spesifiserer i byggingen.Gradle -filen og viser deg de ekstra oppgavene som er tilgjengelige på grunn av plugins.

Du kan få byggingen ved å løpe:

$ Gradle Jar
Bygg vellykket i 1s
2 Handlingsoppgaver: 2 utført

Du kan kjøre krukken din slik:

$ java -cp build/libs/helloworld -1.0.Jar Helloworld
Hei Verden!

JAR -filen settes i Build/LIBS -mappen.

Konklusjon

Blant byggeverktøyene kan ANT være nyttig for mindre prosjekter mens Maven er bedre for å sørge for at alle utviklere følger de samme reglene. Gradle er det siste verktøyet som gir mest fleksibilitet.

Referanser:

  • http: // ant.Apache.org/
  • http: // ant.Apache.org/eføy/
  • https: // maven.Apache.org/
  • https: // gradle.org/
  • http: // makble.com/gradle-Junit-Helloworld-Example
  • https: // eksempler.Javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
  • https: // gradle.org/maven-vs-gradle/
  • https: // maven.Apache.org/guider/bli startet/maven-i-fem-minutter.html
  • https: // stackoverflow.com/spørsmål/20755437/java-build-tools-ant-vs-maven
  • https: // technologyconversations.com/2014/06/18/build-tools/
  • https: // www.Quora.com/hva-er-pro-og-cons-of-maven-versus-ant-as-building-tools-for-java