web-dev-qa-db-fra.com

Pourquoi maven? Quels sont les bénéfices?

Quels sont les principaux avantages de l'utilisation de maven par rapport à disons ant? Cela semble être plus une gêne qu'un outil utile. J'utilise maven 2, avec Eclipse Java EE (pas de m2Eclipse) et Tomcat.

Les partisans de Maven croient que

  1. Maven vous permet d'obtenir facilement les dépendances de vos paquets

  2. Maven vous oblige à avoir une structure de répertoire standard

Dans mon expérience

  1. Comprendre les dépendances de paquets n'est vraiment pas si difficile. Vous le faites rarement de toute façon. Probablement une fois lors de la configuration du projet et quelques autres lors des mises à niveau. Avec maven, vous réparerez des dépendances incompatibles, des poms mal écrits et vous ferez quand même des exclusions de paquets.

  2. Cycle lent FIX-COMPILE-DEPLOY-DEBUG, qui tue la productivité. Ceci est mon principal reproche. Vous faites un changement, vous devez attendre que la construction de Maven commence et attendre son déploiement. Pas de déploiement à chaud que ce soit.

Ou est-ce que je me trompe tout simplement? S'il vous plaît, dirigez-moi dans la bonne direction, je suis tout ouïe.

129
trix

Déterminer les dépendances de paquets n'est vraiment pas si difficile. Vous le faites rarement de toute façon. Probablement une fois lors de la configuration du projet et quelques autres lors des mises à niveau. Avec maven, vous réparerez des dépendances incompatibles, des poms mal écrits et vous ferez quand même des exclusions de paquets.

Pas si difficile ... pour des projets de jouets. Mais les projets sur lesquels je travaille en comptent beaucoup, et beaucoup, et je suis très heureux de les avoir de manière transitoire, pour qu'ils aient un schéma de nommage normalisé. Gérer tout cela manuellement à la main serait un cauchemar.

Et oui, il faut parfois travailler sur la convergence des dépendances. Mais réfléchissez-y à deux fois, cela n’est pas inhérent à Maven, cela est inhérent à tout système utilisant des dépendances (et je parle ici de Java dépendances en général).

Donc, avec Ant, vous devez effectuer le même travail , sauf que vous devez tout faire manuellement: récupérer une version du projet A et de ses dépendances, version du projet B et ses dépendances, déterminer vous-même les versions exactes qu’ils utilisent, vérifier qu’elles ne se chevauchent pas, vérifier si elles ne sont pas incompatibles, etc. Bienvenue en enfer.

D'autre part, Maven prend en charge la gestion des dépendances, me les récupère de manière transitoire et me fournit les outils nécessaires pour gérer la complexité inhérente à la gestion des dépendances : Je peux analyser un arbre de dépendance, contrôler les versions utilisées dans les dépendances transitives, en exclure certaines si est nécessaire, contrôler la convergence entre les modules, etc. pas de magie. Mais au moins, vous avez un soutien.

Et n'oubliez pas que la gestion de la dépendance n'est qu'une petite partie de l'offre de Maven, il y en a beaucoup plus (sans même mentionner les autres outils s'intégrant parfaitement à Maven, par exemple Sonar ).

Cycle lent FIX-COMPILE-DEPLOY-DEBUG, qui tue la productivité. Ceci est mon principal reproche. Vous faites un changement, vous devez attendre que la construction de Maven commence et attendre son déploiement. Pas de déploiement à chaud que ce soit.

Premièrement, pourquoi utilisez-vous Maven comme ça? Je ne. J'utilise mon IDE pour écrire des tests, coder jusqu'à ce qu'ils passent, refactoriser, déployer, déployer à chaud et exécuter une construction Maven locale lorsque j'ai terminé, avant de valider, pour m'assurer de ne pas interrompre la continuité construire.

Deuxièmement, je ne suis pas sûr que l'utilisation de Ant améliorerait beaucoup les choses. Et, selon mon expérience, les constructions modulaires Maven utilisant des dépendances binaires me permettent de gagner du temps de création par rapport aux constructions monolithiques Ant classiques. Quoi qu'il en soit, jetez un œil à Maven Shell pour un environnement prêt à (ré) utiliser Maven (génial au fait).

Donc à la fin, et je suis désolé de le dire, ce n’est pas vraiment Maven qui tue votre productivité, c’est vous qui utilisez mal vos outils. Et si cela ne vous satisfait pas, eh bien, que puis-je dire, ne l'utilisez pas. Personnellement, j'utilise Maven depuis 2003 et je ne l'ai jamais regretté.

108
Pascal Thivent

Maven peut être considéré comme un outil de développement de projet complet et pas seulement comme un outil de construction comme Ant. Vous devriez utiliser Eclipse IDE avec le plugin maven pour résoudre tous vos problèmes.

Voici quelques avantages de Maven, cités à partir de la page Avantages de l’utilisation de Maven :

Henning

  • configuration rapide du projet, pas de fichiers build.xml compliqués, juste un POM et aller
  • tous les développeurs d'un projet utilisent les mêmes dépendances de jar en raison du POM centralisé.
  • obtenir un certain nombre de rapports et de métriques pour un projet "gratuitement"
  • réduire la taille des distributions source, car les bocaux peuvent être extraits d'un emplacement central

Emmanuel Venisse

  • de nombreux objectifs sont disponibles, il n'est donc pas nécessaire de développer une partie spécifique du processus de construction contrairement à ANT. Nous pouvons réutiliser des tâches ANT existantes dans le processus de construction avec antrun plugin.

Jesse Mcconnell

  • Favorise la conception modulaire du code. en simplifiant la gestion de plusieurs projets, il permet de structurer la conception en plusieurs parties logiques, en les associant par le biais du suivi des dépendances dans les fichiers pom.
  • Applique la conception modulaire du code. il est facile de payer des services de code pour le code modulaire, mais lorsque le code est en train de compiler des projets distincts, il est impossible de croiser des références de pollinisation entre modules de code, à moins que vous ne le permettiez spécifiquement dans votre gestion de la dépendance ... faites-le maintenant et corrigez-le plus tard.
  • La gestion de la dépendance est clairement déclarée. avec le mécanisme de gestion des dépendances, vous devez essayer de tout gâcher dans la gestion des versions de vos pots. Le problème classique suivant est de savoir quelle version de ce pot est ce vendeur. Et le mettre en place sur un projet existant enlève le dessus du gâchis existant s'il existe lorsque vous êtes obligé de créer des versions "inconnues" dans votre référentiel pour que tout soit opérationnel ... ou mentez à vous-même si vous connaissez la version actuelle de ABC.jar.
  • cycle de vie typé fort, il existe un cycle de vie bien défini qui va du système logiciel du début à la fin de la construction ... et permet aux utilisateurs de mélanger et d’adapter leur système au cycle de vie au lieu de bricoler leur propre cycle de vie. Cela présente l’avantage supplémentaire de permettre aux gens de passer d’un projet à l’autre et de parler avec le même vocabulaire en termes de développement de logiciels.

Vincent Massol

  • Une plus grande dynamique: Ant est maintenant un héritage et ne va pas vite de l'avant. Maven va vite de l'avant et il est possible de disposer de nombreux outils de grande valeur autour de Maven (CI, projet de tableau de bord, IDE intégration, etc.).
20
YoK

Déterminer les dépendances pour les petits projets n'est pas difficile. Mais une fois que vous commencez à utiliser un arbre de dépendance comportant des centaines de dépendances, les choses peuvent facilement devenir incontrôlables. (Je parle d'expérience ici ...)

L'autre point est que si vous utilisez un IDE avec une compilation incrémentielle et un support Maven (comme Eclipse + m2Eclipse), vous devriez pouvoir configurer le déploiement/le test d'édition/de compilation/hot.

Personnellement, je ne le fais pas parce que je suis venu me méfier de ce mode de développement en raison de mauvaises expériences du passé (pré-maven). Peut-être que quelqu'un peut dire si cela fonctionne réellement avec Eclipse + m2Eclipse.

10
Stephen C

Les avantages de Maven par rapport à la fourmi sont nombreux. J'essaie de les résumer ici.

Convention over Configuration
Maven utilise une approche distinctive pour la présentation et le démarrage du projet, qui permet de passer facilement d’un projet à l’autre. Généralement, il suffit du contrôle de contrôle et de la commande maven pour obtenir les artefacts du projet.

Modularisation du projet
Les conventions de projet suggèrent (ou mieux obligent) le développeur à modulariser le projet. Au lieu d'un projet monolithique, vous êtes souvent obligé de diviser votre projet en sous-composants plus petits, ce qui facilite le débogage et la gestion de la structure globale du projet.

Gestion de la dépendance et cycle de vie du projet
Globalement, avec une bonne configuration SCM et un référentiel interne, la gestion des dépendances est assez facile et vous devez à nouveau penser au projet Lifecycle - versions de composant, gestion des versions, etc. Un peu plus complexe que la fourmi quelque chose, mais encore une amélioration de la qualité du projet.

Quel est le problème avec maven?
Maven n'est pas facile. Le cycle de construction (ce qui est fait et quand) n'est pas aussi clair dans le POM. De plus, des problèmes se posent avec la qualité des composants et les dépendances manquantes dans les référentiels publics.
La meilleure approche (selon moi) consiste à disposer d'un référentiel interne pour la mise en cache (et la conservation) des dépendances, et à appliquer à la gestion des versions des composants. Pour les projets plus grands que les exemples de projets dans un livre, vous remerciez maven avant ou après

9
Luca Botti

Maven est l’un des outils où vous devez réellement décider à l’avance et qui vous plaît, car vous passerez un certain temps à l’apprendre et à prendre cette décision une fois pour toutes. vous permettra de sauter toutes sortes de doutes tout en apprenant (parce que vous comme il et voulez l'utiliser)!

Les conventions fortes aident dans de nombreux endroits - comme Hudson qui peut faire des merveilles avec les projets Maven - mais cela peut être difficile à voir au début.

edit: En 2016, Maven est le seul outil de construction Java où les trois principaux IDE peuvent utiliser les sources immédiatement. En d’autres termes, l’utilisation de maven rend votre construction indépendante de l’IDE. Cela permet par exemple de utiliser le profilage Netbeans même si vous travaillez normalement dans Eclipse

9

Maven peut apporter des avantages pour votre processus de construction en utilisant des conventions et des pratiques standard pour accélérer votre cycle de développement tout en vous aidant à atteindre un taux de réussite plus élevé. Pour plus de détails sur la manière dont Maven peut vous aider dans votre processus de développement, veuillez vous reporter à la section Avantages de l’utilisation de Maven.

6
user433555

Maven est un puissant outil de gestion de projet basé sur le POM (Project Object Model). Il est utilisé pour la construction de projets, la dépendance et la documentation. Cela simplifie le processus de construction comme ANT. Mais il est trop avancé que ANT. Maven aide à gérer: les versions, la documentation, la mémorisation, les GDS, les versions, la distribution. - Le référentiel maven est un répertoire de fichiers JAR empaquetés avec le fichier pom.xml. Maven recherche des dépendances dans les référentiels.

3
Nikhil Pahariya

Je n'ai jamais rencontré le point 2? Pouvez-vous expliquer pourquoi vous pensez que cela affecte le déploiement de quelque manière que ce soit. Si quelque chose vous permet de structurer vos projets de manière modulaire, ce qui permet en fait de corriger les bogues dans un niveau particulier et de développer indépendamment une API à partir du reste du projet, par exemple.

Il est possible que vous essayiez de tout mettre dans un seul module, auquel cas le problème n’est pas vraiment maven, mais de la façon dont vous l’utilisez.

2
Goibniu

Cela aurait dû être un commentaire, mais il ne convenait pas à la longueur d'un commentaire, je l'ai donc posté comme réponse.

Tous les avantages mentionnés dans d'autres réponses sont réalisables par des moyens plus simples que l'utilisation de maven. Si, par exemple, vous débutez dans un projet, vous passerez de toute façon plus de temps à créer une architecture de projet, à joindre des composants, à coder plutôt que de télécharger des fichiers JAR et de les copier dans le dossier lib. Si vous avez de l'expérience dans votre domaine, vous savez déjà comment démarrer le projet avec quelles bibliothèques. Je ne vois aucun avantage à utiliser maven, en particulier lorsque cela pose beaucoup de problèmes lors de la gestion automatique des dépendances.

Je n'ai qu'une connaissance intermédiaire de maven, mais je vous le dis, j'ai réalisé de grands projets (tels que des ERP) sans utiliser maven.

0
Syed Aqeel Ashiq