Java

Ant vs Maven vs Gradle

Ant vs Maven vs Gradle

Välja rätt byggverktyg: Ant vs Maven vs Gradle

Under mjukvaruutveckling måste utvecklare bygga om samma kod om och om igen. De försöker ofta använda bash-skript eller andra skriptspråk för att automatisera uppgiften. Det finns dock byggverktyg tillgängliga som är mer lämpliga för byggautomation. De dominerande byggverktygen är:

Låt oss undersöka verktygen för att ta reda på mer.

Apache Ant med Ivy

Apache Ant är ett Java-baserat kommandoradsverktyg som använder XML-filer för att definiera byggskript. Det används främst för Java-byggnader men det kan också användas för C / C ++ -utveckling. Inbyggda uppgifter ger sätt att sammanställa, montera, testa och köra programapplikationer. Användare kan också skapa sina egna "antlibs" för att förbättra funktionaliteten hos Ant. Apache Ivy är ett beroendeshanteringsverktyg som enkelt integreras med Ant för att ge ett mer robust ekosystem. Ant började utvecklas 2000.

Fördelar

Nackdelar

Ant with Ivy Exempel

Du kan installera den senaste Ant här. Du måste ladda ner zip, expandera och placera bin-mappen i din väg. Du kan använda följande kommando för att se om Ant är korrekt installerat:

$ ant -version
Apache Ant (TM) version 1.10.1 sammanställd den 2 februari 2017

När du har installerat Ant kan du ladda ner den senaste Ivy-burken och lägga den i lib-mappen i Ant-katalogen.

När du har installerat Ant skapar du mappar helloworld och helloworld / src. Inuti src-mappen, sätt helloworld.java-fil med koden:

/ **************************
Skriver ut "Hello World!"
*************************** /
public class helloworld
public static void main (String [] args)
Systemet.ut.println ("Hello World!");

Skapa nu en build i mappen helloworld.xml-fil med följande kod:
























Och i samma helloworld-mapp, skapa murgrönan.xml-fil med följande kod:






Katalogstrukturen ska se ut så här:

Hej världen
| - bygga.xml
| - murgröna.xml
'- src
'-- Hej världen.java

Nu kan du köra build med kommandot:

$ myra burk

En framgångsrik byggnad bör ge utdata så här:

$ myra burk
Buildfile: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
lösa:
[murgröna: hämta] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / ivy / ::
[murgröna: hämta] :: laddningsinställningar :: url = jar: fil: / Användare / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.burk!/ org / apache / ivy / core / settings / ivysettings.xml
[ivy: retrieve] :: lösa beroenden :: org.apache # helloworld; [e-postskyddad]
Macbook Air.lokal
[murgröna: hämta] confs: [standard]
[murgröna: hämta] hittade junit # junit; 4.12 offentligt
[ivy: retrieve] hittade org.hamcrest # hamcrest-core; 1.3 offentligt
[murgröna: hämta] :: upplösningsrapport :: lösa 397ms :: artefakter dl 15ms
---------------------------------------------------------------------
| | moduler || artefakter |
| conf | nummer | sök | dwnlded | utvisad || nummer | dwnlded |
---------------------------------------------------------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[murgröna: hämta] :: hämtning :: org.apache # helloworld
[murgröna: hämta] confs: [standard]
[ivy: retrieve] 0 artefakter kopierade, 4 redan hämtade (0kB / 39ms)
sammanställa:
[mkdir] Skapad dir: / Användare / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
klasser
[javac] / Användare / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: varning:
'includeeantruntime' var inte inställt, som standard att bygga.sysclasspath = sista; satt till falskt
för repeterbara byggnader
[javac] Sammanställning av 1 källfil till / Användare / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / klasser
burk:
[mkdir] Skapad dir: / Användare / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Building jar: / Användare / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Hej världen.burk
BYGG FRAMGÅNGT
Total tid: 6 sekunder

Du kan prova jar-filen så här:

$ java -cp build / bin / helloworld.burk helloworld
Hej världen!

Vi har definierat den jar-fil som ska läggas i mappen build / bin. Mapparna skapas under byggnaden. Ant jar-kommandot anropar jar-målet i byggnaden.xml.

Maven

Maven utvecklades för att lösa problemen med Ant-baserade skript. Det behöll XML-filerna men tog en annan inställning till organisationen. I Ant måste utvecklare skapa alla uppgifter. Maven minskar uppgiftsskapandet genom att implementera starkare standarder för att organisera kod. Som ett resultat är det lättare att komma igång med standardprojekt.

Det introducerade också nedladdningar av beroende som underlättade utvecklingen. Innan Ivy in Ant infördes, var användarna tvungna att hantera beroenden lokalt. Maven antog först beroendeshanteringsfilosofin.

Mavens strikta standarder gör det dock svårt att skriva anpassade build-skript. Verktyget är enkelt att arbeta med så länge som projektet följer de strikta standarderna.

Fördelar

Nackdelar

Maven Exempel

Du kan ladda ner den senaste Maven härifrån. Du kan kontrollera installationen så här:

$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maven hem: / Användare / zak / BuildTools / Maven / apache-maven-3.5.2
Java-version: 1.8.0_74, leverantör: Oracle Corporation
Java-hem: / Library / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Innehåll / Hem / jre
Standardinställning: sv_US, plattformskodning: UTF-8
OS-namn: "mac os x", version: "10.11.6 ", arch:" x86_64 ", family:" mac "

Skapa en helloworld-mapp och skapa ett projekt med följande kommando:

$ mvn arketyp: generera -DroupId = com.Företagsnamn.helloworld -DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Det ska skapa mappstrukturen och generera utdata som ser ut så här:

[INFO] Skannar efter projekt ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generera (standard-cli)> generera-källor
@ fristående-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ fristående-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generera (standard-cli) @ fristående-pom ---
[INFO] Genererar projekt i batch-läge
[INFO] ----------------------------------------------------------------------------
[INFO] Använd följande parametrar för att skapa projekt från Old (1.x) Arketyp:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Värde: / Användare / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: paket, Värde: com.Företagsnamn.Hej världen
[INFO] Parameter: groupId, Värde: com.Företagsnamn.Hej världen
[INFO] Parameter: artifactId, Värde: helloworld
[INFO] Parameter: packageName, Value: com.Företagsnamn.Hej världen
[INFO] Parameter: version, Värde: 1.0-STILLBILD
[INFO] -projekt skapat från Old (1.x) Arketyp i dir: / Användare / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BYGG FRAMGÅNG
[INFO] ------------------------------------------------------------------------
[INFO] Total tid: 8.602 s
[INFO] Avslutad: 2018-01-27T00: 05: 37-08: 00
[INFO] Slutligt minne: 15M / 152M
[INFO] ------------------------------------------------------------------------

Mappstrukturen ska se ut så här:

Hej världen
| - pom.xml
'- src
| - huvud
| '- java
| '- com
| '-- Företagsnamn
| '-- Hej världen
| '-- App.java
'- test
'- java
'- com
'-- Företagsnamn
'-- Hej världen
'- AppTest.java

Pom.xml innehåller byggkonfigurationerna. Inuti pom.xml koden ser ut så här:

xsi: schemaLocation = "http: // maven.apache.org / POM / 4.0.0 http: // maven.apache.org / maven-v4_0
_0.xsd ">
4.0.0
com.Företagsnamn.Hej världen
Hej världen
burk
1.0-STILLBILD
Hej världen
http: // maven.apache.org


junit
junit
3.8.1
testa


Du kan skapa jar-filen med följande kommando:

$ mvn-paket
[INFO] Skannar efter projekt ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Bygga helloworld 1.0-STILLBILD
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resurser (standardresurser) @ helloworld ---
[VARNING] Använda plattformskodning (UTF-8 faktiskt) för att kopiera filtrerade resurser, dvs.e.
build är plattformberoende!
[INFO] hoppa över icke existerande resursDirectory / Användare / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompilera (standardkompilera) @ helloworld ---
[INFO] Upptäckta ändringar - kompilera om modulen!
[VARNING] Filkodning har inte ställts in, med plattformskodning UTF-8, i.e. bygga är
plattformsberoende!
[INFO] Sammanställning av 1 källfil till / Användare / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / mål / klasser
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (standard-testResources) @
Hej världen ---
[VARNING] Använda plattformskodning (UTF-8 faktiskt) för att kopiera filtrerade resurser, dvs.e.
build är plattformberoende!
[INFO] hoppa över icke existerande resursDirectory / Användare / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resurser
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (standard-testCompile) @ helloworld ---
[INFO] Upptäckta ändringar - kompilera om modulen!
[VARNING] Filkodning har inte ställts in, med plattformskodning UTF-8, i.e. bygga är
plattformsberoende!
[INFO] Sammanställning av en källfil till / Användare / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-klasser
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (standardtest) @ helloworld ---
[INFO] Surefire-rapportkatalog: / Användare / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
säkerhetsrapporter
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.Företagsnamn.Hej världen.AppTest
Testkörningar: 1, misslyckanden: 0, fel: 0, hoppade över: 0, förfluten tid: 0.014 sek
Resultat:
Testkörningar: 1, misslyckanden: 0, fel: 0, hoppade över: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (standard-jar) @ helloworld ---
[INFO] Byggkruka: / Användare / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-STILLBILD.burk
[INFO] ------------------------------------------------------------------------
[INFO] BYGG FRAMGÅNG
[INFO] ------------------------------------------------------------------------
[INFO] Total tid: 5.624 s
[INFO] Slutförd: 2018-01-27T00: 11: 10-08: 00
[INFO] Slutligt minne: 16M / 114M
[INFO] ------------------------------------------------------------------------

Du kan köra jar-filen så här:

$ java -cp target / helloworld-1.0-STILLBILD.jar com.Företagsnamn.Hej världen.App
Hej världen!

Jar-filen läggs i målmappen.

Gradle

Gradle kombinerar kraften från Ant och Maven. Den första versionen av Gradle släpptes 2012. Det har sett snabb adoption. Google använder det för närvarande för Android OS.

Istället för XML använder Gradle språket Groovy. Som ett resultat är byggskript i Gradle lättare att skriva och läsa. Den använde ursprungligen Ivy för beroendeshantering, men den använder sin egen beroendemotor nu.

Fördelar

Nackdelar

Gradle Exempel

Du kan installera Gradle härifrån. När du har ställt in Gradle i din väg kan du kontrollera det genom att:

$ gradle --version
------------------------------------------------------------
Grad 4.5
------------------------------------------------------------
Byggtid: 2018-01-24 17:04:52 UTC
Revision: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant (TM) version 1.9.9 sammanställd den 2 februari 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Skapa sedan följande katalogstruktur:

Hej världen
| - bygga.gradle
'- src
| - huvud
'- java
'-- Hej världen
'-- Hej världen.java

För helvärlden.java sätta koden från Ant-exemplet. Och för byggnad.gradle sätt i följande kod:

tillämpa plugin: 'java'
version = '1.0 '
arkiv
mavenCentral ()

beroenden
testCompile-grupp: 'junit', namn: 'junit', version: '4.12 '

Du kan använda kommandot “gradle Tasks -all” för att titta på alla tillgängliga kommandon. Gradle plockar automatiskt upp de plugins du anger i byggnaden.gradle-fil och visar de extra uppgifter som finns tillgängliga på grund av plugins.

Du kan få build genom att köra:

$ gradle burk
BYGG FRAMGÅNG på 1s
2 åtgärdbara uppgifter: 2 utförda

Du kan köra din burk så här:

$ java -cp build / libs / helloworld-1.0.burk helloworld
Hej världen!

Jar-filen läggs i mappen build / libs.

Slutsats

Bland byggverktygen kan Ant vara användbart för mindre projekt medan Maven är bättre för att se till att alla utvecklare följer samma regler. Gradle är det senaste verktyget som ger mest flexibilitet.

Referenser:

Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...
HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...