Que fait Maven, en théorie et en pratique? Quand cela vaut-il la peine de l'utiliser? [fermé]


156

Je suis sur le point de démarrer un projet Java juste pour m'entraîner. J'ai lu sur Maven, mais je ne comprends pas vraiment quand il est censé être utilisé.

Pouvez-vous me donner quelques conseils pratiques? Maven aide-t-il beaucoup? Que fait réellement Maven pour mon projet?


Hej, jetez un œil à ma question sur Maven, Spring et Roo. J'ai beaucoup utilisé Maven pour travailler avec Eclipse et pour accélérer le temps de développement. Mais il y a quelques problèmes. Je pense que vous devez comprendre le système d'annotation Java avec Maven. Mais jetez un œil à la question que j'ai liée ..
mm24

@ArtB donne une bonne explication de ce qu'est Maven. Cependant, comme je le dis dans mon commentaire à sa réponse, je ne pense pas que vous devriez l'utiliser. Si vous voulez un outil de construction, utilisez Gradle. Téléchargez-le, installez-le, puis dans votre projet créez un fichier appelé build.gradlequi contient juste une ligne disant apply plugin: 'java'. En supposant que votre code source se trouve à la place habituelle ( src/main/java, les tests unitaires dans src/test/java), vous pouvez maintenant créer, tester et empaqueter votre code en disant gradle build. Facile!
Tom Anderson du

2
Pour utiliser Gradle vous aurez besoin d'apprendre Groovy et vous avez certainement vous rencontrerez projet avec Maven il est donc encore l' apprentissage vaut la peine. De plus, comprendre Maven facilitera la compréhension des autres outils qui l'ont suivi.
Traîneau du

Que doit faire Maven avec les annotations Java?
Traîneau du

1
+1 pour Gradle, non seulement il est plus proche de la maison pour les développeurs java, il peut réutiliser des artefacts maven et il peut facilement créer des versions non standard stackoverflow.com/questions/1163173/…
Kalpesh Soni

Réponses:


183

Ce qu'il fait

Maven est un "outil de gestion de build", il sert à définir comment vos .javafichiers sont compilés .class, empaquetés dans .jar(ou .warou .ear) des fichiers, (pré / post) traités avec des outils, gérant vos CLASSPATHtâches et toutes les autres tâches requises pour construisez votre projet. Il est similaire à Apache Ant ou Gradle ou Makefiles en C / C ++, mais il tente d'être complètement autonome et vous ne devriez pas avoir besoin d'outils ou de scripts supplémentaires en incorporant d'autres tâches courantes telles que le téléchargement et l'installation des bibliothèques nécessaires, etc.

Il est également conçu autour du thème "portabilité de build", de sorte que vous n'ayez pas de problèmes comme avoir le même code avec le même buildscript fonctionnant sur un ordinateur mais pas sur un autre (c'est un problème connu, nous avons des VM de Windows 98 machines puisque nous n'avons pas pu compiler certaines de nos applications Delphi ailleurs). Pour cette raison, c'est également le meilleur moyen de travailler sur un projet entre des personnes qui utilisent différents IDE, car les scripts Ant générés par l'IDE sont difficiles à importer dans d'autres IDE, mais tous les IDE comprennent et supportent de nos jours Maven ( IntelliJ , Eclipse et NetBeans ). Même si vous n'aimez pas Maven, cela finit par être le point de référence pour tous les autres outils de builds modernes.

Pourquoi devriez-vous l'utiliser

Il y a trois choses à propos de Maven qui sont très agréables.

  1. Maven (après avoir déclaré celles que vous utilisez) téléchargera automatiquement toutes les bibliothèques que vous utilisez et les bibliothèques qu'elles utilisent pour vous. C'est très agréable et rend le traitement de nombreuses bibliothèques ridiculement facile. Cela vous permet d'éviter "l'enfer des dépendances" . Il est similaire à Apache Ant's Ivy .

  2. Il utilise la " Convention sur la configuration " afin que, par défaut, vous n'ayez pas besoin de définir les tâches que vous souhaitez effectuer. Vous n'avez pas besoin d'écrire une étape "compiler", "tester", "package" ou "nettoyer" comme vous le feriez dans Ant ou un Makefile. Placez simplement les fichiers dans les endroits où Maven les attend et cela devrait fonctionner immédiatement.

  3. Maven propose également de nombreux plug-ins intéressants que vous pouvez installer pour gérer de nombreuses tâches de routine, de la génération de classes Java à partir d'un schéma XSD à l'aide de JAXB à la mesure de la couverture de test avec Cobertura . Ajoutez-les simplement à votre pom.xmlet ils s'intégreront à tout ce que vous voulez faire.

La courbe d'apprentissage initiale est raide, mais (presque) tous les développeurs Java professionnels utilisent Maven ou souhaitent qu'ils le fassent. Vous devriez utiliser Maven sur chaque projet, mais ne soyez pas surpris si cela vous prend du temps pour vous y habituer et que parfois vous souhaiteriez pouvoir faire les choses manuellement, car apprendre quelque chose de nouveau fait parfois mal. Cependant, une fois que vous vous serez vraiment habitué à Maven, vous constaterez que la gestion des builds ne prend presque pas de temps.

Comment commencer

Le meilleur endroit pour commencer est " Maven en 5 minutes ". Cela vous permettra de démarrer avec un projet prêt à coder avec tous les fichiers et dossiers nécessaires à la configuration (oui, je recommande d'utiliser l'archétype de démarrage rapide, du moins au début).

Une fois que vous avez commencé, vous voudrez mieux comprendre comment l'outil est censé être utilisé. Pour cela, " Better Builds with Maven " est l'endroit le plus complet pour comprendre les tripes de son fonctionnement, cependant, " Maven: The Complete Reference " est plus à jour. Lisez le premier pour comprendre, puis utilisez le second comme référence.


12
Il existe de nombreux développeurs Java professionnels qui n'utilisent pas Maven et sont heureux de ne pas le faire; certains d'entre eux rejettent simplement sa complexité et sa rigidité et s'en tiennent à Ant ou similaire, mais un nombre croissant d'entre eux sont des personnes qui sont passées aux successeurs de Maven tels que Gradle et Buildr. Ces successeurs héritent de Maven l'idée de fournir un ensemble puissant d'étapes de construction prêtes à l'emploi, mais facilitent également l'ajout d'étapes personnalisées. Compte tenu de leur existence, je ne pense honnêtement pas qu'il y ait une raison d'utiliser Maven pour de nouveaux projets.
Tom Anderson du

5
Il y a toujours la question de la quantité de détails à mettre dans une réponse, mais si vous êtes un développeur Java moyen, dans votre bureau, il est probable que ce soit Maven ou Shitty Ant hell (Ant + bash + perl + build ordinateur configuré avec des chemins magiques). Si vous êtes l'un des rares chanceux à travailler avec des développeurs A + dans un bon environnement avec la liberté de choisir, il existe d'autres options (Gradle en est une). Mais si vous travaillez dans un endroit moyen, Maven est le meilleur outil qui ne laisse pas vos collègues de travail se couper avec quelque chose de pointu.
Traîneau du

4
Je ne pense pas qu'il faille être un développeur A + pour utiliser Gradle. Je ne vois pas pourquoi une organisation qui pourrait adopter Maven ne pourrait pas adopter Gradle. Il est vrai que Gradle vous permet de vous tirer une balle dans le pied, de la même manière qu'Ant le fait, mais d'une manière que Maven rend assez difficile (et j'ai une collection de pieds abattus de mes collègues pour le prouver); c'est le compromis pour permettre de faire des choses que Maven rend pratiquement impossibles.
Tom Anderson du

4
Pour ce qui est d'utiliser quelque chose comme Gradle et d'éviter les coups de pied, je propose une classification par triage des programmeurs. Certains programmeurs n'auront pas peur d'éditer les scripts de construction et de faire les choses plus ou moins bien. Ces personnes sont utiles. Certains programmeurs ont peur des scripts de construction et ne les toucheront pas. Ces personnes au moins ne sont pas nuisibles; J'ai fait partie d'une équipe de 12 personnes où seuls deux d'entre nous ont osé toucher à la construction, et cela a plutôt bien fonctionné. Certains programmeurs n'ont pas peur des scripts de construction, mais les bousilleront s'ils les touchent. Ces gens sont dangereux.
Tom Anderson du

1
donc c'est comme npm pour Java
KJW

9

Depuis la documentation Sonatype :

La réponse à cette question dépend de votre propre point de vue. La grande majorité des utilisateurs de Maven appelleront Maven un «outil de construction»: un outil utilisé pour créer des artefacts déployables à partir du code source. Les ingénieurs de construction et les chefs de projet peuvent désigner Maven comme quelque chose de plus complet: un outil de gestion de projet. Quelle est la différence? Un outil de construction tel que Ant se concentre uniquement sur le prétraitement, la compilation, l'empaquetage, les tests et la distribution. Un outil de gestion de projet tel que Maven fournit un sur-ensemble de fonctionnalités trouvées dans un outil de construction. En plus de fournir des capacités de construction, Maven peut également exécuter des rapports, générer un site Web et faciliter la communication entre les membres d'une équipe de travail.

Je recommande fortement de consulter la documentation Sonatype et de passer du temps à regarder les plugins disponibles pour comprendre la puissance de Maven.

Très brièvement, il fonctionne à un niveau conceptuel plus élevé que (disons) Ant. Avec Ant, vous spécifiez l'ensemble de fichiers et de ressources que vous souhaitez créer, puis spécifiez comment vous voulez qu'ils soient regroupés, et spécifiez l'ordre qui devrait se produire dans (nettoyer / compiler / jar). Avec Maven, tout cela est implicite. Maven s'attend à trouver vos fichiers dans des endroits particuliers et fonctionnera automatiquement avec cela. Par conséquent, mettre en place un projet avec Maven peut être beaucoup plus simple, mais vous devez respecter les règles de Maven!


Je ne l'ai pas contre-voté, mais peut-être que les contrevenants ont lu votre citation de la propagande de Sonatype comme une approbation implicite de la philosophie totalitaire de «l'outil de gestion de projet» de Maven.
Tom Anderson du

1
Je ne pense pas que vous ayez répondu à la question de l'OP, à la place vous venez de publier le discours marketing ... et ce discours est ridicule puisque la "gestion de projet" est tellement plus que ce que Maven fait, elle sert à confondre plus qu'elle n'aide, A MON HUMBLE AVIS.
Traîneau du

2
@Brian Désolé, si mon commentaire précédent semble flamboyant, mais permettez-moi de le reformuler: je pense que votre commentaire n'explique bien Maven que si vous comprenez déjà ce qu'est Maven, mais comme point de départ initial, ce n'est pas utile.
Traîneau du

5

Mavenest un outil de construction. Avec Antou Gradlesont des Javaoutils de construction.
Si vous êtes un débutant en Java, construisez simplement à l'aide de votre IDE car Mavenla courbe d'apprentissage est abrupte.


Le support IDE pour Maven dans NetBeans est très bon, ce qui rend la courbe d'apprentissage presque inexistante.
Captain Giraffe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.