324 votes

Pourquoi utiliser Gradle plutôt que Ant ou Maven ?

Que signifie un autre outil de construction destiné à Java me faire vraiment ?

Si vous utilisez Gradle plutôt qu’un autre outil, pourquoi ?

(Voir aussi Pourquoi utiliser Buildr plutôt que Ant ou Maven)

248voto

Rich Seller Points 46052

Je n'utilise pas Gradle en colère moi-même (juste un jouet projet à ce jour) [auteur signifie qu'ils ont utilisé Gradle sur qu'un jouet projet jusqu'à présent, pas que Gradle est un jouet de projet - voir les commentaires], mais je dirais que les raisons qui l'on pourrait envisager de l'utiliser serait à cause de la frustration de l'Ant et Maven.

Dans mon expérience, la Fourmi est souvent en écriture seule (oui je sais il est possible d'écrire joliment modulaire, élégant construires, mais le fait est que la plupart des gens ne le font pas). Pour tout non-trivial projets, il devient l'esprit de flexion, et prend grand soin de s'assurer que des créations complexes sont vraiment portables. Son impératif que la nature peut conduire à la réplication de configuration entre les versions (bien que les macros peuvent aider ici).

Maven prend le contre-pied et attend que vous pour intégrer complètement avec le cycle de vie de Maven. Connu Ant les utilisateurs à trouver ce particulièrement décalée que Maven enlève beaucoup de libertés que vous avez dans Ant. Par exemple, il y a un Sonatype blog qui énumère de nombreux Maven critiques et leurs réponses.

Le plugin Maven mécanisme très puissant construire des configurations, et le modèle d'héritage signifie que vous pouvez définir un petit ensemble de parent POMs de l'encapsulation de vos configurations de génération pour l'ensemble de l'entreprise et les projets individuels peuvent hériter de ces configurations, les laissant léger. Maven configuration est très détaillé (bien que Maven 3 promet d'adresse), et si vous voulez faire quelque chose qui "n'est pas le Maven façon", vous devez écrire un plugin ou d'utiliser le hacky Ant l'intégration. Remarque j'aime l'écriture de plugins Maven mais ils apprécient que beaucoup vont s'opposer à l'effort.

Gradle promet de frapper le sweet spot entre Ant et Maven. Il utilise le Lierre's approche pour la résolution des dépendances. Il permet de convention over configuration, mais comprend également des tâches Ant comme des citoyens à part entière. Il est également à bon escient permet d'utiliser l'existant, Maven/Ivy dépôts.

Donc, si vous avez touché et s'est coincé avec une des Ant/Maven points de douleur, il vaut probablement la peine d'essayer Gradle, mais à mon avis il reste à voir si vous ne vous seriez pas seulement être en négociation problèmes connus pour les inconnus. La preuve du pudding c'est qu'on le mange bien donc je réserve jugement jusqu'à ce que le produit est un peu plus mature et d'autres ont repassé en tout défaut (ils l'appellent à la pointe pour une raison). Je vais encore l'utiliser dans mes projets de jouets cependant, Il est toujours bon d'être informé des options.

79voto

Steven Devijver Points 2167

Gradle peuvent être utilisés à de nombreuses fins: c'est un bien meilleur couteau de l'armée Suisse que Ant - mais c'est spécifiquement axé sur le multi-projet s'appuie.

Tout d'abord, Gradle est une dépendance de l'outil de programmation qui signifie aussi qu'elle est un outil de programmation. Avec Gradle vous pouvez exécuter n'importe quelle tâche aléatoire dans votre installation et Gradle sera assurez-vous que tous déclarés avec des dépendances sont correctement et en temps opportun exécuté. Votre code peut être répartie dans de nombreux répertoires à n'importe quel type de mise en page (un arbre, un plat, dispersés, ...).

Gradle a deux phases distinctes: l'évaluation et l'exécution. En gros, lors de l'évaluation Gradle va rechercher et évaluer les scripts de compilation dans les répertoires, il est censé ressembler. Au cours de l'exécution Gradle va exécuter les tâches qui ont été chargés lors de l'évaluation en tenant compte des tâches inter-dépendances.

En plus de ces dépendances fonctionnalités de programmation Gradle ajoute projet et un POT de dépendance fonctionnalités par intégration avec Apache Ivy. Comme vous le savez, le Lierre est un beaucoup plus puissant et beaucoup moins opiniâtres de la dépendance de l'outil de gestion que de dire Maven.

Gradle détecte des dépendances entre les projets et entre les projets et les Bocaux. Gradle fonctionne avec Maven dépôts (download et upload) comme le iBiblio une ou de vos propres référentiels, mais prend également en charge et autres type de stockage de l'infrastructure que vous pourriez avoir.

En multi-projet s'appuie Gradle est à la fois adaptable et s'adapte à la construction de la structure et de l'architecture. Vous n'avez pas à adapter votre structure ou de l'architecture de votre outil de construction qu'il serait nécessaire avec Maven.

Gradle essaie très fort de ne pas obtenir sur votre chemin, un effort Maven presque jamais fait. La Convention est bon et pourtant si, c'est la flexibilité. Gradle vous donne beaucoup plus de fonctionnalités que Maven ne mais plus important encore, dans de nombreux cas, Gradle vous offre une transition sans effort chemin loin de Maven.

64voto

omnisis Points 999

Cela peut être un peu controversé, mais Gradle ne cache pas le fait que c'est un véritable langage de programmation.

Ant + ant-contrib est essentiellement une turing langage de programmation que personne ne veut vraiment de programme.

Maven essaie de prendre le contre-pied de l'approche d'essayer d'être complètement déclaratives et de vous forcer à écrire et compiler un plugin si vous avez besoin de logique. Elle impose également un modèle de projet qui est complètement rigide. Gradle combine le meilleur de tous ces outils:

  • Il en résulte plus de convention de configuration (ala Maven), mais seulement dans la mesure où vous le voulez
  • Il vous permet d'écrire flexible des tâches comme la Fourmi
  • Il offre multi-projet de module de soutien qui est supérieure à la fois à Ant et Maven
  • Il a un DSL qui rend le 80% des choses faciles et les 20% les choses possible (contrairement à d'autres outils de construction qui font l'80% facile, 10% et 10% en fait impossible).

Gradle est le plus configurable et flexible outil de génération je n'ai pas encore utiliser. Il nécessite un certain investissement à l'avant d'apprendre le DSL et des concepts comme celui de configurations, mais si vous avez besoin d'un no-nonsense et entièrement configurable JVM outil de construction, il est difficile à battre.

49voto

piotrga Points 700

Gradle joliment combine à la fois l'Ant et Maven, prenant le meilleur des deux cadres. La flexibilité de la Fourmi et de la convention sur la configuration, la gestion de la dépendance et des plugins Maven.

Donc, si vous voulez avoir un standard de java construire, comme dans maven, mais la tâche de test a faire quelques pas elle pourrait ressembler à ci-dessous.

construire.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

En plus de cela il utilise groovy syntaxe qui donne beaucoup plus d'expression puis de puissance ant/maven xml.

C'est un sur-ensemble de l'Ant - vous pouvez utiliser toutes les tâches Ant dans gradle avec plus agréables, groovy, comme la syntaxe, c'est à dire.

ant.copy(file:'a.txt', toDir:"xyz")

ou

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

35voto

BCK Points 359

Nous utilisons Gradle et a choisi sur Maven et Ant. Ant nous a donné une totale flexibilité, et le Lierre donne une meilleure gestion des dépendances de Maven, mais il n'y a pas grand support pour le multi-projet s'appuie. Vous finissez par faire beaucoup de codage à l'appui de multi-projet s'appuie. Également construire par convention est agréable et fait construire des scripts plus concis. Avec Maven, il faut construire par la convention de trop loin, et la personnalisation de votre processus de création devient un hack. Aussi, Maven favorise chaque projet d'édition d'un artefact. Parfois, vous avez un projet divisé en sous-projets, mais vous voulez que tous les sous-projets seront construits et versionné ensemble. Pas vraiment quelque chose de Maven est conçu pour.

Avec Gradle vous avez la flexibilité de Fourmis et de construire par la convention de Maven. Par exemple, il est trivial de prolonger la classique construire le cycle de vie avec votre propre tâche. Et vous n'êtes pas obligés d'utiliser une convention si vous ne souhaitez pas. Groovy est beaucoup plus joli que le code XML. Dans Gradle, vous pouvez définir des dépendances entre les projets sur le système de fichiers local, sans la nécessité de publier des artefacts pour chaque à un référentiel. Enfin, Gradle utilise de Lierre, de sorte qu'il a une excellente gestion de la dépendance. Le seul vrai bémol pour moi jusqu'à présent est le manque de maturité de l'intégration Eclipse, mais les options pour Maven ne sont pas vraiment beaucoup mieux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X