Java

Fourmi contre Maven contre Gradle

Fourmi contre Maven contre Gradle

Choisir le bon outil de construction : Ant vs Maven vs Gradle

Pendant le développement du logiciel, les développeurs doivent reconstruire le même code encore et encore. Ils essaient souvent d'utiliser des scripts bash ou d'autres langages de script pour automatiser la tâche. Cependant, il existe des outils de construction disponibles qui sont plus appropriés pour l'automatisation de la construction. Les outils de construction prédominants sont :

Explorons les outils pour en savoir plus.

Apache Ant avec Ivy

Apache Ant est un outil de ligne de commande basé sur Java qui utilise des fichiers XML pour définir des scripts de construction. Il est principalement utilisé pour les versions Java, mais il peut également être utilisé pour le développement C/C++. Les tâches intégrées offrent des moyens de compiler, assembler, tester et exécuter des applications logicielles. Les utilisateurs peuvent également créer leurs propres « antlibs » pour améliorer les fonctionnalités de Ant. Apache Ivy est un outil de gestion des dépendances qui s'intègre facilement à Ant pour fournir un écosystème plus robuste. Le développement de Ant a commencé en 2000.

Avantages

Les inconvénients

Exemple de fourmi avec lierre

Vous pouvez installer la dernière Ant à partir d'ici. Vous devez télécharger le zip, développer et mettre le dossier bin dans votre chemin. Vous pouvez utiliser la commande suivante pour voir si Ant est correctement installé :

$ ant -version
Apache Ant(TM) version 1.dix.1 compilé le 2 février 2017

Une fois Ant installé, vous pouvez télécharger le dernier pot Ivy et le mettre dans le dossier lib à l'intérieur du répertoire Ant.

Après avoir installé Ant, créez les dossiers helloworld et helloworld/src. Dans le dossier src, mettez helloworld.java avec le code :

/******************************
Imprime "Hello World!"
***************************/
classe publique helloworld
public static void main(String[] args)
Système.en dehors.println("Bonjour tout le monde!");

Maintenant, dans le dossier helloworld, créez un build.xml avec le code suivant :
























Et dans le même dossier helloworld, créez le lierre.xml avec le code suivant :






La structure du répertoire devrait ressembler à ceci :

Bonjour le monde
|-- construire.xml
|-- lierre.xml
'-- src
'-- Bonjour le monde.Java

Vous pouvez maintenant exécuter la compilation avec la commande :

$ fourmi

Une compilation réussie devrait fournir une sortie comme celle-ci :

$ fourmi
Fichier de construction : /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
résoudre:
[ivy:retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: chargement des paramètres :: url = jar:file:/Users/zak/BuildTools/ANT/apache
-fourmi-1.dix.1/lib/lierre-2.4.0.pot!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: résolution des dépendances :: org.apache#helloworld;[email protected]
Macbook Air.local
[ivy:retrieve]     confs : [default]
[ivy:retrieve]     found junit#junit;4.12 en public
[ivy:retrieve]     organisation trouvée.hamcrest#hamcrest-core;1.3 en public
[ivy:retrieve] :: rapport de résolution :: résoudre 397 ms :: artefacts dl 15 ms
---------------------------------------------------------------------
| | modules            || artefacts   |
| conf       | nombre| rechercher|détruit|expulsé|| nombre|déchargé|
---------------------------------------------------------------------
| par défaut     | 2   | 0   | 0   | 0   || 4   | 0   |
---------------------------------------------------------------------
[ivy:retrieve] :: récupération :: org.apache#helloworld
[ivy:retrieve]     confs : [default]
[ivy:retrieve]     0 artefacts copiés, 4 déjà récupérés (0 ko/39 ms)
compiler:
[mkdir] Répertoire créé : /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
Des classes
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22 : avertissement :
'includeantruntime' n'a pas été défini, par défaut la compilation.sysclasspath=last ; mis à faux
pour des constructions reproductibles
[javac] Compilation d'un fichier source dans /Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes
pot:
[mkdir] Répertoire créé : /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Création d'un jar : /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
Bonjour le monde.pot
BÂTIR AVEC SUCCÈS
Temps total : 6 secondes

Vous pouvez essayer le fichier jar comme ceci :

$ java -cp build/bin/helloworld.pot helloworld
Bonjour le monde!

Nous avons défini le fichier jar à mettre dans le dossier build/bin. Les dossiers sont créés pendant la construction. La commande ant jar appelle la cible jar dans le build.xml.

Maven

Maven a été développé pour résoudre les problèmes rencontrés avec les scripts basés sur Ant. Il a conservé les fichiers XML mais a adopté une approche différente de l'organisation. Dans Ant, les développeurs doivent créer toutes les tâches. Maven réduit la création de tâches en mettant en œuvre des normes plus strictes pour l'organisation du code. En conséquence, il est plus facile de se lancer sur des projets standards.

Il a également introduit des téléchargements de dépendances qui ont facilité le développement. Avant l'introduction d'Ivy dans Ant, les utilisateurs devaient gérer les dépendances localement. Maven a d'abord adopté la philosophie de gestion des dépendances.

Cependant, les normes strictes de Mavens rendent difficile l'écriture de scripts de construction personnalisés. L'outil est facile à utiliser tant que le projet respecte les normes strictes.

Avantages

Les inconvénients

Exemple Maven

Vous pouvez télécharger le dernier Maven ici. Vous pouvez vérifier l'installation comme ceci :

$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07:00)
Accueil Maven : /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Version Java : 1.8.0_74, fournisseur : Oracle Corporation
Accueil Java : /Bibliothèque/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contenu/Accueil/jre
Paramètres régionaux par défaut : en_US, encodage de la plate-forme : UTF-8
Nom du système d'exploitation : "mac os x", version : "10.11.6", arc : "x86_64", famille : "mac"

Créez un dossier helloworld et générez un projet avec la commande suivante :

$ mvn archétype:générer -DgroupId=com.Nom de la compagnie.helloworld -DartifactId=helloworld
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Il devrait créer la structure de dossiers et générer la sortie qui ressemble à ceci :

[INFO] Recherche de projets…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.0:generate (default-cli) > generate-sources
@ pom autonome >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ pom autonome <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.0:générer (default-cli) @ standalone-pom ---
[INFO] Génération de projet en mode Batch
[INFO] ----------------------------------------------------------------------------
[INFO] Utilisation des paramètres suivants pour créer un projet à partir de l'ancien (1.x) Archétype :
maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Paramètre : basedir, Valeur : /Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Paramètre : package, Valeur : com.Nom de la compagnie.Bonjour le monde
[INFO] Paramètre : groupId, Valeur : com.Nom de la compagnie.Bonjour le monde
[INFO] Paramètre : artefactId, Valeur : helloworld
[INFO] Paramètre : packageName, Valeur : com.Nom de la compagnie.Bonjour le monde
[INFO] Paramètre : version, Valeur : 1.0-INSTANTANÉ
[INFO] projet créé à partir de Old (1.x) Archétype dans dir : /Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUIRE LE SUCCÈS
[INFO] ------------------------------------------------------------------------
[INFO] Durée totale : 8.602 s
[INFO] Terminé à: 2018-01-27T00:05:37-08:00
[INFO] Mémoire finale : 15 M/152 M
[INFO] ------------------------------------------------------------------------

La structure des dossiers devrait ressembler à ceci :

Bonjour le monde
|-- pompon.xml
'-- src
|-- principal
| '-- java
| '-- com
| '-- Nom de la compagnie
| '-- Bonjour le monde
| '-- Application.Java
'-- test
'-- java
'-- com
'-- Nom de la compagnie
'-- Bonjour le monde
'-- AppTest.Java

Le pompon.xml contient les configurations de construction. À l'intérieur du pompon.xml le code ressemble à ceci :

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd">
4.0.0
com.Nom de la compagnie.Bonjour le monde
Bonjour le monde
pot
1.0-INSTANTANÉ
Bonjour le monde
http://maven.apache.organisation


juin
juin
3.8.1
test


Vous pouvez générer le fichier jar à l'aide de la commande suivante :

Forfait $ mvn
[INFO] Recherche de projets…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Construire helloworld 1.0-INSTANTANÉ
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:ressources (ressources par défaut) @ helloworld ---
[AVERTISSEMENT] En utilisant l'encodage de la plate-forme (UTF-8 en fait) pour copier les ressources filtrées, je.e.
la construction dépend de la plate-forme!
[INFO] ignore le répertoire de ressources non existant /Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/ressources
[INFO]
[INFO] --- maven-compiler-plugin:3.1: compiler (compilation par défaut) @ helloworld ---
[INFO] Modifications détectées - recompilation du module!
[AVERTISSEMENT] Le codage du fichier n'a pas été défini, en utilisant le codage de plate-forme UTF-8, i.e. construire est
dépendant de la plate-forme!
[INFO] Compiler 1 fichier source dans /Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/cible/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @
Bonjour le monde ---
[AVERTISSEMENT] En utilisant l'encodage de la plate-forme (UTF-8 en fait) pour copier les ressources filtrées, je.e.
la construction dépend de la plate-forme!
[INFO] ignore le répertoire de ressources non existant /Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/ressources
[INFO]
[INFO] --- maven-compiler-plugin:3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Modifications détectées - recompilation du module!
[AVERTISSEMENT] Le codage du fichier n'a pas été défini, en utilisant le codage de plate-forme UTF-8, i.e. construire est
dépendant de la plate-forme!
[INFO] Compiler 1 fichier source dans /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4: test (test par défaut) @ helloworld ---
[INFO] Répertoire des rapports Surefire : /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/cible/
rapports infaillibles
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Com en cours d'exécution.Nom de la compagnie.Bonjour le monde.AppTest
Tests exécutés : 1, Échecs : 0, Erreurs : 0, Ignorés : 0, Temps écoulé : 0.014 s
Résultats :
Tests exécutés : 1, Échecs : 0, Erreurs : 0, Ignorés : 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (jar par défaut) @ helloworld ---
[INFO] Création de jar : /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-INSTANTANÉ.pot
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUIRE LE SUCCÈS
[INFO] ------------------------------------------------------------------------
[INFO] Durée totale : 5.624 s
[INFO] Terminé à: 2018-01-27T00:11:10-08:00
[INFO] Mémoire finale : 16 M/114 M
[INFO] ------------------------------------------------------------------------

Vous pouvez exécuter le fichier jar comme ceci :

$ java -cp cible/helloworld-1.0-INSTANTANÉ.pot com.Nom de la compagnie.Bonjour le monde.Application
Bonjour le monde!

Le fichier jar est placé dans le dossier cible.

Gradle

Gradle combine la puissance de Ant et Maven. La première version de Gradle est sortie en 2012. Il a connu une adoption rapide. Google l'utilise actuellement pour Android OS.

Au lieu de XML, Gradle utilise le langage Groovy. En conséquence, les scripts de construction dans Gradle sont plus faciles à écrire et à lire. Il utilisait initialement Ivy pour la gestion des dépendances, mais il utilise maintenant son propre moteur de dépendances.

Avantages

Les inconvénients

Exemple de gradation

Vous pouvez installer Gradle à partir d'ici. Une fois que vous avez configuré Gradle dans votre chemin, vous pouvez le vérifier en :

$ gradle --version
------------------------------------------------------------
4e année.5
------------------------------------------------------------
Heure de création :   2018-01-24 17:04:52 UTC
Révision :     77d0ec90636f43669dc794ca17ef80dd65457bec
Super :       2.4.12
Ant :          Apache Ant(TM) version 1.9.9 compilé le 2 février 2017
JVM :          1.8.0_74 (Oracle Corporation 25.74-b02)
Système d'exploitation :           Mac OS X 10.11.6 x86_64

Ensuite, créez la structure de répertoires suivante :

Bonjour le monde
|-- construire.graduer
'-- src
|-- principal
'-- java
'-- Bonjour le monde
'-- Bonjour le monde.Java

Pour le helloworld.java a mis le code de l'exemple Ant. Et pour construire.gradle a mis le code suivant :

appliquer le plugin : 'java'
version = '1.0'
référentiels
mavenCentral()

dépendances
groupe testCompile : 'junit', nom : 'junit', version : '4.12'

Vous pouvez utiliser la commande « gradle tasks -all » pour consulter toutes les commandes disponibles. Gradle récupère automatiquement les plugins que vous spécifiez dans la construction.gradle et vous montre les tâches supplémentaires disponibles grâce aux plugins.

Vous pouvez obtenir la compilation en exécutant :

$ pot gradle
CONSTRUISEZ AVEC SUCCÈS en 1s
2 tâches exploitables : 2 exécutées

Vous pouvez exécuter votre pot comme ceci :

$ java -cp build/libs/helloworld-1.0.pot helloworld
Bonjour le monde!

Le fichier jar est placé dans le dossier build/libs.

Conclusion

Parmi les outils de construction, Ant peut être utile pour les petits projets tandis que Maven est meilleur pour s'assurer que tous les développeurs suivent les mêmes règles. Gradle est le dernier outil qui offre le plus de flexibilité.

Les références:

Comment changer les boutons gauche et droit de la souris sur un PC Windows 10
Il est tout à fait normal que tous les appareils de souris d'ordinateur soient conçus de manière ergonomique pour les droitiers. Mais il existe des so...
Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...
Ajoutez des gestes de souris à Windows 10 à l'aide de ces outils gratuits
Ces dernières années, les ordinateurs et les systèmes d'exploitation ont considérablement évolué. Il fut un temps où les utilisateurs devaient utilise...