Question

Qu'est-ce un autre outil de construction ciblé à Java vraiment me faire?

Si vous utilisez Gradle sur un autre outil, pourquoi?

Était-ce utile?

La solution

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

Dans mon expérience Ant est en écriture seule fois (oui, je sais qu'il est possible d'écrire magnifiquement construction modulaire, élégant s, mais le fait est la plupart des gens ne le font pas). Pour tout projet non trivial, il devient hallucinant, et prend grand soin de faire en sorte que complexe construit sont vraiment portable. Son caractère impératif peut conduire à la réplication de configuration entre construit (bien que les macros peuvent aider ici).

Maven prend l'approche opposée et vous attend à intégrer complètement le cycle de vie Maven. Les utilisateurs expérimentés Ant trouve cela particulièrement discordante comme Maven élimine la plupart des libertés que vous avez dans Ant. Par exemple, il y a une Sonatype Blog qui énumère un grand nombre des critiques Maven et leurs réponses.

Le mécanisme de plugin Maven permet des configurations de construction très puissants, et le modèle d'héritage signifie que vous pouvez définir un petit ensemble de POMs parents encapsulant vos configurations de construction pour l'ensemble de l'entreprise et des projets individuels peut hériter de ces configurations, les laissant légers. configuration Maven est très bavard (bien que Maven 3 promet d'aborder ce sujet), et si vous voulez faire tout ce qui est vous « pas la façon dont Maven » d'écrire un plugin ou utiliser l'intégration Ant aki. Note Je suis comme écrire des plugins Maven, mais apprécie que beaucoup objecteront à l'effort impliqué.

Gradle promet de frapper le sweet spot entre Ant et Maven. Il utilise l'approche de Ivy pour la résolution de la dépendance. Il permet une configuration mais sur convention comprend également des tâches Ant comme des citoyens de première classe. Il a également à bon escient vous permet d'utiliser des référentiels existants Maven / Ivy.

Donc, si vous avez touché et coincé avec l'un des points de douleur Ant / Maven, il vaut probablement la peine d'essayer Gradle sur, mais à mon avis, il reste à voir si vous ne seriez pas seulement du commerce des problèmes connus pour inconnus. La preuve du pudding est dans le manger mais si je réserve mon jugement jusqu'à ce que le produit est un peu plus mature et d'autres ont aplani des petits défauts (ils l'appellent bord de saignement pour une raison). Je vais encore utiliser dans mes projets jouets cependant, il est toujours bon d'être au courant des options.

Autres conseils

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

Tout d'abord, Gradle est un outil de programmation de dépendance qui signifie aussi qu'il est un outil de programmation. Avec Gradle vous pouvez exécuter une tâche aléatoire dans votre configuration et Gradle vous assurer que tous les dependecies déclarés sont correctement exécutés et en temps opportun. Votre code peut se propager dans de nombreux répertoires dans une sorte de mise en page (arbre, plat, dispersés, ...).

Gradle a deux phases distinctes: l'évaluation et à l'exécution. En fait, lors de l'évaluation Gradle cherchera et évaluer créer des scripts dans les répertoires qu'il est censé regarder. Pendant l'exécution Gradle exécutera les tâches qui ont été chargés lors de l'évaluation prenant en considération la tâche inter-dépendances.

En plus de ces fonctions de programmation de dépendance Gradle ajoute des fonctionnalités dépendance projet et JAR par intergration avec Apache Ivy. Comme vous le savez Ivy est un beaucoup plus puissant et beaucoup moins opiniâtres outil de gestion de la dépendance que dire Maven.

Gradle détecte les dépendances entre les projets et entre les projets et Jarres. Gradle travaille avec des dépôts Maven (téléchargement et téléchargement) comme le iBiblio un ou vos propres référentiels, mais prend également en charge et d'autres types d'infrastructures de dépôt que vous pourriez avoir.

Dans construit multi-projets Gradle est à la fois adaptable et adapte à la structure et l'architecture de la construction. Vous ne devez pas adapter la structure ou l'architecture à votre outil de construction qui serait nécessaire avec Maven.

Gradle essaie très fort de ne pas obtenir dans votre chemin, un effort Maven fait presque jamais. Convention est bon pourtant si une certaine souplesse. Gradle vous donne beaucoup plus de fonctionnalités que Maven fait, mais surtout dans de nombreux cas Gradle vous offrir un chemin de transition sans douleur loin de Maven.

Cela peut être un peu controversé, mais Gradle ne cache pas le fait que c'est un langage de programmation à part entière.

Ant + ant-contrib est essentiellement un langage de programmation turation complète que personne ne veut vraiment programmer.

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

  • Il suit la convention-sur-configuration (ala Maven) mais seulement dans la mesure où vous voulez
  • Il vous permet d'écrire des tâches personnalisées flexibles comme dans Ant
  • Il prend en charge des projets multi-module qui est supérieur à la fois Ant et Maven
  • Il a une connexion DSL qui fait la.
  • facile des choses 80% et les choses 20% possible (contrairement à d'autres outils de construction qui rendent 80% facile, 10% possible et 10% effectivement impossible)

Gradle est la construction la plus configurable et flexible outil que je n'ai pas encore à utiliser. Il demande un certain investissement à l'avant d'apprendre la DSL et des concepts comme les configurations, mais si vous avez besoin sans fioritures et outil de construction JVM entièrement configurable, il est difficile à battre.

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

Donc, si vous voulez avoir une version standard de java, comme dans maven, mais tâche de test doit faire une étape personnalisée pourrait ressembler à ceci.

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 alors xml de fourmi / Maven.

Il est une surcouche de Ant - vous pouvez utiliser toutes les tâches Ant dans gradle avec plus agréable, la syntaxe comme groovy, par exemple

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

ou

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

Nous utilisons Gradle et avons choisi sur Maven et Ant. Ant nous a donné une flexibilité totale, et Ivy donne une meilleure gestion de la dépendance que Maven, mais il n'y a pas un grand soutien pour construit multi-projets. Vous finissez par faire beaucoup de codage pour soutenir construit multi-projets. ayant également une construction par convention est agréable et fait construire des scripts plus concis. Avec Maven, il faut construire par convention trop loin, et la personnalisation de votre processus de construction devient un hack. En outre, chaque projet Maven favorise la publication d'un artefact. Parfois, vous avez un projet divisé en sous-projets, mais vous voulez que tous les sous-projets à construire et Versioned ensemble. Pas vraiment Maven quelque chose est conçu pour.

Avec Gradle vous pouvez avoir la flexibilité de Ant et de construire par convention de Maven. Par exemple, il est trivial de prolonger le cycle de vie de construction classique avec votre propre tâche. Et vous n'êtes pas obligé d'utiliser une convention si vous ne voulez pas. Groovy est beaucoup plus agréable au code que XML. En Gradle, vous pouvez définir des dépendances entre les projets sur le système de fichiers local sans qu'il soit nécessaire de publier des artefacts pour chacun à un référentiel. Enfin, Gradle utilise Ivy, il a une excellente gestion des dépendances. Le seul véritable inconvénient pour moi est donc loin le manque d'intégration maturité Eclipse, mais les options pour Maven ne sont pas vraiment beaucoup mieux.

Ce n'est pas my réponse, mais il résonne certainement avec moi. Il est de ThoughtWorks' Radar Technologie d'Octobre 2012 :

  

Deux choses ont causé la fatigue avec des outils de construction XML comme Ant et   Maven: trop de bretelles en colère et pointues la grossièreté de plug-in   architectures. Bien que les questions de syntaxe peuvent être traitées par   génération, les architectures de plug-in limitent sérieusement la capacité de construction   outils pour se développer grâce que les projets deviennent plus complexes. Nous sommes venus   de sentir que les plug-ins sont le mauvais niveau d'abstraction, et préfèrent   outils de langue comme Gradle et Rake à la place, parce qu'ils offrent   abstractions plus fines et plus de flexibilité à long terme.

Gradle remit le plaisir dans la construction / assemblage logiciel. Je fourmi pour construire des logiciels toute ma carrière et je l'ai toujours considéré la partie « BuildIT » réelle du travail dev étant un mal nécessaire. A quelques mois de notre société se lassa de ne pas utiliser une prise en pension binaire (vérification alias dans des pots dans les VCS) et on m'a donné la tâche d'enquêter sur ce sujet. Commencé par le lierre, car il pourrait être boulonné sur le dessus de la fourmi, n'a pas eu beaucoup de chance d'obtenir mes objets construits publiés comme je voulais. Je suis allé pour maven et piraté loin avec xml, travaillé magnifique pour certaines libs d'aide simple mais je suis tombé sur de sérieux problèmes en essayant de regrouper les applications prêtes à déployer. Importunés un certain temps googler plugins et la lecture des forums et liquidée le téléchargement des billions de pots de support pour différents plugins que j'ai eu du mal à utiliser. Enfin, je suis allé pour gradle (obtenir assez amer à ce moment, et agacé: « Il ne devrait pas être aussi dur! »)

Mais dès le premier jour de mon humeur a commencé à améliorer. Je recevais quelque part. Ça m'a pris comme deux heures pour migrer mon premier module de fourmi et le fichier de construction était fondamentalement rien. Montage facile un écran. Le grand "wow" était: construire scripts xml, comment stupide est-ce? le fait que la déclaration d'une dépendance me prend une ligne est très attrayante pour -> vous pouvez facilement voir toutes les dépendances pour un certain projet sur une page. A partir de là, j'été sur un rouleau constant, pour tous les problèmes que je fait face à ce jour il y a une solution simple et élégante. Je pense que ce sont les raisons:

  • groovy est très intuitif pour les développeurs Java
  • documentation est grande Awesome
  • la flexibilité est sans fin

Maintenant, je passe mes journées à essayer de penser de nouvelles fonctionnalités à ajouter à notre processus de construction. Comment est-ce malade?

Il est aussi beaucoup plus facile à gérer construit natif. Ant et Maven sont effectivement Java uniquement. Certains plugins existent pour Maven qui tentent de gérer des projets autochtones, mais ils ne font pas un travail efficace. tâches Ant est possible d'écrire la compilation des projets natifs, mais ils sont trop complexes et difficiles.

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

Je suis d'accord en partie avec Ed Staub. Gradle est nettement plus puissant par rapport à maven et offre une plus grande flexibilité à long terme.

Après avoir effectué une évaluation pour passer de maven à Gradle, nous avons décidé de tenir à lui-même maven pour deux questions nous avons rencontré avec gradle (vitesse est plus lente que maven, proxy ne fonctionnait pas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top