[java] Pourquoi utiliser Gradle au lieu de Ant ou Maven?


Answers

Gradle peut être utilisé à de nombreuses fins - c'est un bien meilleur couteau suisse que Ant - mais il est spécifiquement axé sur les constructions multi-projets.

Tout d'abord, Gradle est un outil de programmation de dépendance qui signifie également que c'est un outil de programmation. Avec Gradle, vous pouvez exécuter n'importe quelle tâche aléatoire dans votre configuration et Gradle s'assurera que toutes les dépendances déclarées sont exécutées correctement et en temps opportun. Votre code peut être réparti sur de nombreux répertoires dans n'importe quel type de mise en page (arborescente, plate, dispersée, ...).

Gradle a deux phases distinctes: l'évaluation et l'exécution. Fondamentalement, pendant l'évaluation, Gradle cherchera et évaluera les scripts de construction dans les répertoires qu'il est supposé regarder. Pendant l'exécution, Gradle exécutera les tâches qui ont été chargées lors de l'évaluation en tenant compte des interdépendances des tâches.

En plus de ces fonctionnalités de programmation de dépendances, Gradle ajoute des fonctionnalités de dépendance de projet et JAR par intégration avec Apache Ivy. Comme vous le savez, Ivy est un outil de gestion des dépendances beaucoup plus puissant et beaucoup moins opiniâtre que Maven.

Gradle détecte les dépendances entre les projets et entre les projets et les fichiers JAR. Gradle fonctionne avec les dépôts Maven (télécharger et télécharger) comme l'iBiblio ou vos propres dépôts, mais aussi les supports et autres types d'infrastructure de dépôt que vous pourriez avoir.

Dans les constructions multi-projets, Gradle est à la fois adaptable et s'adapte à la structure et à l'architecture de la construction. Vous n'avez pas besoin d'adapter votre structure ou votre architecture à votre outil de construction, comme cela serait nécessaire avec Maven.

Gradle essaie très fort de ne pas vous gêner, un effort que Maven ne fait presque jamais. La convention est bonne, tout comme la flexibilité. Gradle vous donne beaucoup plus de fonctionnalités que Maven, mais le plus important dans de nombreux cas, Gradle vous offrira une transition sans douleur loin de Maven.

Question

Qu'est-ce qu'un autre outil de construction destiné à Java m'apporte vraiment?

Si vous utilisez Gradle sur un autre outil, pourquoi?




Il est également beaucoup plus facile de gérer les builds natifs. Ant et Maven sont effectivement Java seulement. Certains plugins existent pour Maven qui essaient de gérer certains projets natifs, mais ils ne font pas un travail efficace. Des tâches Ant peuvent être écrites pour compiler des projets natifs, mais elles sont trop complexes et complexes.

Nous faisons Java avec JNI et beaucoup d'autres bits natifs. Gradle a simplifié considérablement notre désordre Ant. Lorsque nous avons commencé à introduire la gestion des dépendances dans les projets natifs, c'était désordonné. Nous avons demandé à Maven de le faire, mais le code Gradle équivalent était une infime fraction de ce qui était nécessaire à Maven, et les gens pouvaient le lire et le comprendre sans devenir des gourous Maven.




Ce n'est pas ma réponse, mais ça résonne définitivement avec moi. C'est à partir du radar de technologie de ThoughtWorks d'octobre 2012 :

Deux choses ont causé de la fatigue avec les outils de construction basés sur XML comme Ant et Maven: trop d'accolades pointues en colère et la grossièreté des architectures de plug-in. Tandis que les problèmes de syntaxe peuvent être résolus via la génération, les architectures de plug-in limitent considérablement la capacité des outils de construction à croître de manière progressive à mesure que les projets deviennent plus complexes. Nous en sommes venus à penser que les plug-ins sont un mauvais niveau d'abstraction, et préférons les outils basés sur les langages comme Gradle et Rake, car ils offrent des abstractions plus fines et plus de flexibilité à long terme.




Gradle combine à la fois Ant et Maven, en prenant le meilleur des deux cadres. Flexibilité de Ant et convention sur la configuration, la gestion des dépendances et les plugins de Maven.

Donc, si vous voulez avoir une build java standard, comme dans maven, mais que la tâche de test doit faire une étape personnalisée, elle pourrait ressembler à ci-dessous.

build.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 une syntaxe groovy qui donne beaucoup plus de puissance d'expression que le xml d'ant / maven.

C'est un surensemble de Ant - vous pouvez utiliser toutes les tâches Ant dans Gradle avec une syntaxe plus agréable et plus groovy, c'est-à-dire.

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

ou

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



Related