Giava

Ant contro Maven contro Gradle

Ant contro Maven contro Gradle

Scegliere lo strumento di costruzione giusto: Ant vs Maven vs Gradle

Durante lo sviluppo del software, gli sviluppatori devono ricostruire lo stesso codice più e più volte. Spesso cercano di utilizzare script bash o altri linguaggi di scripting per automatizzare l'attività. Tuttavia, sono disponibili strumenti di compilazione più appropriati per l'automazione della compilazione. Gli strumenti di costruzione predominanti sono:

Indaghiamo gli strumenti per saperne di più.

Formica Apache con Ivy

Apache Ant è uno strumento da riga di comando basato su Java che utilizza file XML per definire script di compilazione build. Viene utilizzato principalmente per le build Java, ma può essere utilizzato anche per lo sviluppo C/C++. Le attività integrate forniscono modi per compilare, assemblare, testare ed eseguire applicazioni software. Gli utenti possono anche creare i propri "antilibs" per migliorare la funzionalità di Ant. Apache Ivy è uno strumento di gestione delle dipendenze che si integra facilmente con Ant per fornire un ecosistema più robusto. Lo sviluppo di Ant è iniziato nel 2000.

Professionisti

Contro

Formica con Ivy Esempio

Puoi installare l'ultima Ant da qui. Devi scaricare lo zip, espandere e inserire la cartella bin nel tuo percorso. Puoi usare il seguente comando per vedere se Ant è installato correttamente:

$ ant -version
Apache Ant(TM) versione 1.10.1 compilato il 2 febbraio 2017

Una volta installato Ant, puoi scaricare l'ultimo jar Ivy e metterlo nella cartella lib all'interno della directory Ant Ant.

Dopo aver installato Ant, crea le cartelle helloworld e helloworld/src. All'interno della cartella src, metti helloworld.java con il codice:

/*************************
Stampa "Hello World!"
*************************/
classe pubblica ciaomondo
public static void main(String[] args)
Sistema.su.println("Ciao mondo!");

Ora nella cartella helloworld crea una build.xml con il seguente codice:
























E nella stessa cartella Helloworld, crea l'edera.xml con il seguente codice:






La struttura della directory dovrebbe assomigliare a questa:

Ciao mondo
|-- build.xml
|-- edera.xml
'-- src
'-- Ciao mondo.Giava

Ora puoi eseguire la build con il comando:

barattolo di $ formica

Una build di successo dovrebbe fornire un output come questo:

barattolo di $ formica
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
risolvere:
[ivy:recuperare] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: impostazioni di caricamento :: url = jar:file:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.vaso!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:recupero] :: risoluzione delle dipendenze :: org.apache#helloworld;[email protected]
MacBook Air.Locale
[ivy:recupera]     confs: [predefinito]
[ivy:retrieve]     trovato junit#junit;4.12 in pubblico
[ivy:retrieve]     trovato org.hamcrest#hamcrest-core;1.3 in pubblico
[ivy:recupero] :: rapporto risoluzione :: risoluzione 397 ms :: artefatti dl 15 ms
---------------------------------------------------------------------
| | moduli            || artefatti   |
| conf       | numero| cerca|dwnlded|sfrattato|| numero|dwnlded|
---------------------------------------------------------------------
| predefinito     | 2   | 0   | 0   | 0   || 4   | 0   |
---------------------------------------------------------------------
[ivy:recupero] :: recupero :: org.apache#helloworld
[ivy:recupera]     confs: [predefinito]
[ivy:retrieve]     0 artefatti copiati, 4 già recuperati (0kB/39ms)
compilare:
[mkdir] Dir creata: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
classi
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: avviso:
'includeantruntime' non è stato impostato, per impostazione predefinita è build.sysclasspath=ultimo; impostato su falso
per build ripetibili
[javac] Compilazione di 1 file sorgente in /Users/zak/_work/LearnBuildScripts/LearnANT/
ciaomondo/costruisci/classi
vaso:
[mkdir] Dir creata: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Vaso di costruzione: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
Ciao mondo.vaso
COSTRUISCI CON SUCCESSO
Tempo totale: 6 secondi

Puoi provare il file jar in questo modo:

$ java -cp build/bin/helloworld.vaso ciaomondo
Ciao mondo!

Abbiamo definito il file jar da inserire nella cartella build/bin. Le cartelle vengono create durante la build. Il comando ant jar chiama il target jar nella build.xml.

Esperto di

Maven è stato sviluppato per risolvere i problemi affrontati con lo scripting basato su Ant. Ha mantenuto i file XML ma ha adottato un approccio diverso all'organizzazione. In Ant, gli sviluppatori devono creare tutte le attività. Maven riduce la creazione di attività implementando standard più rigorosi per l'organizzazione del codice. Di conseguenza, è più facile iniziare con progetti standard.

Ha anche introdotto i download delle dipendenze che hanno reso più facile lo sviluppo. Prima dell'introduzione di Ivy in Ant, gli utenti dovevano gestire le dipendenze localmente. Maven ha adottato prima la filosofia di gestione delle dipendenze.

Tuttavia, gli standard rigorosi di Mavens rendono difficile scrivere script di build personalizzati. Lo strumento è facile da usare purché il progetto segua gli standard rigorosi.

Professionisti

Contro

Esempio di Maven

Puoi scaricare l'ultima versione di Maven da qui. Puoi controllare l'installazione in questo modo:

$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07:00)
Pagina iniziale di Maven: /Utenti/zak/BuildTools/Maven/apache-maven-3.5.2
Versione Java: 1.8.0_74, fornitore: Oracle Corporation
Home Java: /Libreria/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contenuto/Home/jre
Locale predefinito: en_US, codifica piattaforma: UTF-8
Nome del sistema operativo: "mac os x", versione: "10.11.6", arco: "x86_64", famiglia: "mac"

Crea una cartella helloworld e genera un progetto con il seguente comando:

$ mvn archetipo:genera -DgroupId=com.Nome della ditta.ciaomondo -DartifactId=ciaomondo
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Dovrebbe creare la struttura delle cartelle e generare l'output simile a questo:

[INFO] Ricerca progetti..
[INFORMAZIONI]
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (senza POM) 1
[INFORMAZIONI] ------------------------------------------------------------------------
[INFORMAZIONI]
[INFO] >>> plug-in archetipo maven:3.0.0:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFORMAZIONI]
[INFORMAZIONI] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFORMAZIONI]
[INFORMAZIONI]
[INFO] --- maven-archetype-plugin:3.0.0:generate (default-cli) @ standalone-pom ---
[INFO] Generazione progetto in modalità batch
[INFORMAZIONI] ----------------------------------------------------------------------------
[INFO] Utilizzo dei seguenti parametri per creare un progetto da Old (1.x) Archetipo:
maven-archetype-quickstart:1.0
[INFORMAZIONI] ----------------------------------------------------------------------------
[INFO] Parametro: basedir, Valore: /Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametro: pacchetto, Valore: com.Nome della ditta.Ciao mondo
[INFO] Parametro: groupId, Valore: com.Nome della ditta.Ciao mondo
[INFO] Parametro: ID artefatto, Valore: helloworld
[INFO] Parametro: nomepacchetto, valore: com.Nome della ditta.Ciao mondo
[INFO] Parametro: versione, Valore: 1.0-SNAPSHOT
[INFO] progetto creato da Old (1.x) Archetipo nella directory: /Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] COSTRUISCI SUCCESSO
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] Tempo totale: 8.602 secondi
[INFO] Finito il: 2018-01-27T00:05:37-08:00
[INFO] Memoria finale: 15M/152M
[INFORMAZIONI] ------------------------------------------------------------------------

La struttura delle cartelle dovrebbe assomigliare a questa:

Ciao mondo
|-- pom.xml
'-- src
|-- principale
| '-- java
| '--com
| '-- Nome della ditta
| '-- Ciao mondo
| '-- App.Giava
'-- prova
'-- java
'--com
'-- Nome della ditta
'-- Ciao mondo
'-- AppTest.Giava

il pom.xml contiene le configurazioni di build. All'interno del pom.xml il codice è simile a questo:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd">
4.0.0
come.Nome della ditta.Ciao mondo
Ciao mondo
vaso
1.0-SNAPSHOT
Ciao mondo
http://maven.apache.organizzazione


junit
junit
3.8.1
test


Puoi generare il file jar usando il seguente comando:

$ pacchetto mvn
[INFO] Ricerca progetti..
[INFORMAZIONI]
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] Costruire Helloworld 1.0-SNAPSHOT
[INFORMAZIONI] ------------------------------------------------------------------------
[INFORMAZIONI]
[INFO] --- maven-resources-plugin:2.6:risorse (risorse predefinite) @ helloworld ---
[ATTENZIONE] Utilizzo della codifica della piattaforma (in realtà UTF-8) per copiare le risorse filtrate, i.e.
la build dipende dalla piattaforma!
[INFO] salta la directory di risorse non esistente /Users/zak/_work/LearnBuildScripts/LearnMaven/
ciaomondo/src/main/resources
[INFORMAZIONI]
[INFO] --- maven-compilatore-plugin:3.1: compila (compilazione predefinita) @ helloworld ---
[INFO] Modifiche rilevate - ricompilazione del modulo!
[AVVERTENZA] La codifica del file non è stata impostata, utilizzando la codifica della piattaforma UTF-8, i.e. costruire è
dipendente dalla piattaforma!
[INFO] Compilazione di 1 file sorgente in /Users/zak/_work/LearnBuildScripts/LearnMaven/
ciaomondo/target/classi
[INFORMAZIONI]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @
Ciao mondo ---
[ATTENZIONE] Utilizzo della codifica della piattaforma (in realtà UTF-8) per copiare le risorse filtrate, i.e.
la build dipende dalla piattaforma!
[INFO] salta la directory di risorse non esistenti /Users/zak/_work/LearnBuildScripts/LearnMaven/
ciaomondo/src/test/resources
[INFORMAZIONI]
[INFO] --- maven-compilatore-plugin:3.1:testCompile (default-testCompile) @ helloworld ---
[INFO] Modifiche rilevate - ricompilazione del modulo!
[AVVERTENZA] La codifica del file non è stata impostata, utilizzando la codifica della piattaforma UTF-8, i.e. costruire è
dipendente dalla piattaforma!
[INFO] Compilazione di 1 file sorgente in /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/classi-di-prova
[INFORMAZIONI]
[INFO] --- plug-in maven-surefire:2.12.4:test (test predefinito) @ helloworld ---
[INFO] Directory dei rapporti Surefire: /Users/zak/_work/LearnBuildScripts/LearnMaven
/ciaomondo/target/
rapporti sicuri
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Correre come.Nome della ditta.Ciao mondo.AppTest
Test eseguiti: 1, Errori: 0, Errori: 0, Salti: 0, Tempo trascorso: 0.014 sec
Risultati:
Test eseguiti: 1, Errori: 0, Errori: 0, Salti: 0
[INFORMAZIONI]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---
[INFO] Vaso di costruzione: /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
ciaomondo-1.0-SNAPSHOT.vaso
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] COSTRUISCI SUCCESSO
[INFORMAZIONI] ------------------------------------------------------------------------
[INFO] Tempo totale: 5.624 secondi
[INFO] Finito il: 2018-01-27T00:11:10-08:00
[INFO] Memoria finale: 16M/114M
[INFORMAZIONI] ------------------------------------------------------------------------

Puoi eseguire il file jar in questo modo:

$ java -cp target/helloworld-1.0-SNAPSHOT.vaso come.Nome della ditta.Ciao mondo.App
Ciao mondo!

Il file jar viene messo nella cartella di destinazione.

Gradle

Gradle combina il potere di Ant e Maven. La prima versione di Gradle è stata rilasciata nel 2012. Ha visto una rapida adozione. Google lo sta attualmente utilizzando per il sistema operativo Android.

Invece di XML, Gradle usa il linguaggio Groovy. Di conseguenza, gli script di compilazione in Gradle sono più facili da scrivere e leggere. Inizialmente utilizzava Ivy per la gestione delle dipendenze, ma ora utilizza il proprio motore di dipendenza.

Professionisti

Contro

Esempio Gradle

Puoi installare Gradle da qui. Una volta impostato Gradle nel tuo percorso, puoi verificarlo:

$ gradle --version
------------------------------------------------------------
Grado 4.5
------------------------------------------------------------
Tempo di costruzione:   24/01/2018 17:04:52 UTC
Revisione:     77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy:       2.4.12
Ant:          Apache Ant(TM) versione 1.9.9 compilato il 2 febbraio 2017
JVM:          1.8.0_74 (Oracle Corporation 25.74-b02)
Sistema operativo:           Mac OS X 10.11.6x86_64

Quindi, crea la seguente struttura di directory:

Ciao mondo
|-- build.grado
'-- src
|-- principale
'-- java
'-- Ciao mondo
'-- Ciao mondo.Giava

Per l'aldilà.java ha messo il codice dall'esempio di Ant. E per costruire.gradle ha inserito il seguente codice:

applica il plugin: 'java'
versione = '1.0'
repository
mavenCentral()

dipendenze
testCompile gruppo: 'junit', nome: 'junit', versione: '4.12'

Puoi usare il comando "gradle task -all" per guardare tutti i comandi disponibili. Gradle preleva automaticamente i plugin che specifichi nella build.gradle e ti mostra le attività extra disponibili grazie ai plugin.

Puoi ottenere la build eseguendo:

barattolo $gradle
COSTRUISCI CON SUCCESSO in 1s
2 attività eseguibili: 2 eseguite

Puoi eseguire il tuo barattolo in questo modo:

$ java -cp build/libs/helloworld-1.0.vaso ciaomondo
Ciao mondo!

Il file jar viene messo nella cartella build/libs.

Conclusione

Tra gli strumenti di compilazione, Ant può essere utile per progetti più piccoli mentre Maven è migliore per assicurarsi che tutti gli sviluppatori seguano le stesse regole. Gradle è l'ultimo strumento che offre la massima flessibilità.

Riferimenti:

Controlla e gestisci il movimento del mouse tra più monitor in Windows 10
Gestore mouse con doppio display ti consente di controllare e configurare il movimento del mouse tra più monitor, rallentando i suoi movimenti vicino ...
WinMouse ti consente di personalizzare e migliorare il movimento del puntatore del mouse su PC Windows
Se vuoi migliorare le funzioni predefinite del puntatore del mouse, usa freeware WinMouse. Aggiunge più funzionalità per aiutarti a ottenere il massim...
Il tasto sinistro del mouse non funziona su Windows 10
Se stai utilizzando un mouse dedicato con il tuo laptop o computer desktop ma il il tasto sinistro del mouse non funziona su Windows 10/8/7 per qualch...