web-dev-qa-db-fra.com

Migration de Maven 2/3 à Gradle

J'ai regardé Gradle et semble assez intéressant. Je pense que pouvoir écrire vos scripts dans une autre langue que XML est assez cool, et il n'est pas clair pour moi si les fichiers POM polyglottes Maven sont toujours une option réalisable.

Je travaille sur un projet qui utilise Maven 2.2.1 comme outil de construction. Ce projet:

  • est multi-module
  • utilise (également les nôtres) des plugins
  • s'appuie sur un référentiel proxy Artifactory

Y a-t-il des expériences sur les migrations de Maven à Gradle? Gotchas, points douloureux, cas d'angle? Toute expérience est la bienvenue.

La migration de Maven à Gradle n'est pas aussi facile que de Ant à Maven (au moins pour le moment). Vous pouvez facilement réutiliser les scripts Ant et en faire des citoyens de première classe dans votre version Gradle. Il y a aussi une tâche sur la feuille de route Gradle pour importation approfondie des builds Maven .

Jusqu'à présent, j'ai migré deux versions d'entreprise de Maven vers Gradle. Les deux étaient des projets multi-modules utilisant des plugins Maven standard. J'ai essentiellement réécrit les versions à la manière de Gradle, ce qui nécessite au moins quelques connaissances sur Gradle. D'après mon expérience, vous pouvez facilement faire fonctionner la même version dans Gradle. Gradle ne vous encadre pas vraiment ici et est assez flexible. En cours de route, vous pourriez avoir à écrire un plugin personnalisé qui n'existe pas encore en fonction des plugins Maven que vous utilisez. Cependant, il y a déjà un large éventail de plugins là-bas. Jusqu'à présent, je n'ai pas encore rencontré de véritable barrage routier. Même si la documentation de Gradle est assez bonne, vous pourriez vous retrouver à lire de nombreux messages sur le forum Gradle pour trouver la solution à l'un de vos problèmes. Certaines des fonctionnalités standard de Maven ne sont pas prises en charge prédéfinies, par ex. une portée provided ou WAR inplace . Cependant, il existe des moyens simples de le contourner. Je n'ai pas utilisé de référentiels Artifactory. Ceux que j'ai traités étaient des référentiels Nexus. Pour autant que je sache, les gars de Gradle ont un bon support pour Artifactory. Edit: JFrog fournit un plug-in Artifactory Gradle .

Une bonne façon de commencer est d'utiliser l'outil de migration Maven2Gradle qui vous permet de générer un script Gradle à partir de votre build Maven. Personnellement, je ne l'ai pas encore utilisé. J'ai développé la version Gradle côte à côte avec la version Maven qui n'a causé aucun problème. Maven a placé sa sortie sous target, Gradle sous build. Assurez-vous de préparer votre équipe au changement. Laissez-les essayer la version Gradle et familiarisez-vous avec l'outil.

Une fois que vous aurez entièrement migré, vous serez très satisfait de la maintenabilité et de l'extensibilité de votre build. Il est très facile d'ajouter une logique de construction personnalisée et vous serez reconnaissant d'avoir quitté XML-land. En termes de performances, vous ne reculerez pas non plus. La fonction de construction incrémentielle fait très bien son travail.

34
Benjamin Muschko

Vous pouvez également vouloir lire cet article de mon expérience de portage d'un projet maven à gradle.

11
Raghuram

Dans le répertoire où vous avez pom.xml, exécutez simplement la commande ci-dessous:

gradle init --type pom

Cela devrait convertir votre maven pom.xml en build.gradle

8
Arun Gopalpuri

maven2Gradle semble avoir été remplacé par la possibilité d'exécuter gradle init à partir de la ligne de commande (bien que ce soit une fonctionnalité plutôt expérimentale). Cela semble fonctionner correctement pour faire une configuration de base Gradle à partir d'un projet Maven.

1
Jon Onstott

Vous pouvez toujours changer le buildDir en 'target' sous gradle si vous voulez que la sortie de la construction passe sous 'target' au lieu de 'build' comme maven:

buildDir = 'target'
1
Arun Gopalpuri