¿Qué hace Maven, en teoría y en la práctica? ¿Cuándo vale la pena usarlo? [cerrado]

156

Estoy a punto de comenzar un proyecto Java solo por práctica. He leído sobre Maven, pero en realidad no entiendo cuándo debe usarse.

¿Me puede dar algunos consejos prácticos? ¿Maven ayuda mucho? ¿Qué hace realmente Maven por mi proyecto?

Piotr Krysiak
fuente
Hej, mira esta pregunta mía sobre Maven, Spring y Roo. Usé mucho Maven cuando trabajé con Eclipse y para acelerar el tiempo de desarrollo. Pero hay algunos problemas. Creo que necesitas entender el sistema de anotación Java junto con Maven. Pero eche un vistazo a la pregunta que he vinculado ..
mm24
@ArtB da una buena explicación de lo que es Maven. Sin embargo, como digo en mi comentario a su respuesta, no creo que deba usarlo. Si quieres una herramienta de construcción, usa Gradle. Descárguelo, instálelo, luego en su proyecto cree un archivo llamado build.gradleque solo contenga una línea que diga apply plugin: 'java'. Suponiendo que su código fuente está en el lugar habitual ( src/main/java, pruebas unitarias src/test/java), ahora puede construir, probar y empaquetar su código diciendo gradle build. ¡Fácil!
Tom Anderson
2
Para utilizar Gradle que necesita para aprender Groovy y que sin duda va a venir a través del proyecto utilizando Maven lo que es todavía vale la pena aprender. Además, comprender Maven facilitará la comprensión de otras herramientas que vinieron después.
Trineo el
¿Qué tiene que ver Maven con las anotaciones de Java?
Trineo el
1
1 de Gradle, no sólo está más cerca de casa para que los desarrolladores de Java, se puede volver a utilizar artefactos maven y puede hacer que no estándar se crea fácilmente, stackoverflow.com/questions/1163173/...~~V~~singular~~3rd
Kalpesh Soni

Respuestas:

183

Que hace

Maven es una "herramienta de administración de compilación", es para definir cómo .javase compilan sus archivos, cómo se .classempaquetan en .jar( .waro .ear) archivos, (pre / post) procesados ​​con herramientas, administrando su CLASSPATHy todos los otros tipos de tareas que se requieren para Construye tu proyecto. Es similar a Apache Ant o Gradle o Makefiles en C / C ++, pero intenta ser completamente autónomo para que no necesite herramientas o scripts adicionales al incorporar otras tareas comunes como descargar e instalar las bibliotecas necesarias, etc.

También está diseñado en torno al tema "portabilidad de compilación", para que no tenga problemas al tener el mismo código con el mismo buildscript funcionando en una computadora pero no en otra (este es un problema conocido, tenemos máquinas virtuales de Windows 98 máquinas ya que no pudimos obtener algunas de nuestras aplicaciones Delphi compiladas en ningún otro lado). Debido a esto, también es la mejor manera de trabajar en un proyecto entre personas que usan diferentes IDE, ya que los scripts Ant generados por IDE son difíciles de importar a otros IDE, pero todos los IDE de hoy en día entienden y apoyan a Maven ( IntelliJ , Eclipse y NetBeans ) Incluso si no te gusta Maven, termina siendo el punto de referencia para todas las otras herramientas de compilación modernas.

¿Por qué deberías usarlo?

Hay tres cosas sobre Maven que son muy agradables.

  1. Maven (Después de declarar que los que usted está utilizando) descargar todas las bibliotecas que se utilizan y las bibliotecas que se utilizan de forma automática. Esto es muy agradable y hace que manejar muchas bibliotecas sea ridículamente fácil. Esto le permite evitar el "infierno de dependencia" . Es similar a la hiedra de la hormiga Apache .

  2. Utiliza " Convención sobre configuración " para que, de manera predeterminada, no necesite definir las tareas que desea realizar. No necesita escribir un paso de "compilación", "prueba", "paquete" o "limpieza" como lo haría en Ant o un Makefile. Simplemente coloque los archivos en los lugares en los que Maven los espera y debería funcionar de inmediato.

  3. Maven también tiene muchos complementos agradables que puede instalar que manejarán muchas tareas rutinarias desde la generación de clases Java desde un esquema XSD usando JAXB hasta la medición de la cobertura de prueba con Cobertura . Simplemente agréguelos a su cuenta pom.xmly se integrarán con todo lo demás que desee hacer.

La curva de aprendizaje inicial es empinada, pero (casi) cada desarrollador profesional de Java usa Maven o lo desea. Debería usar Maven en cada proyecto, aunque no se sorprenda si le toma un tiempo acostumbrarse y que a veces desearía poder hacer las cosas manualmente, ya que aprender algo nuevo a veces duele. Sin embargo, una vez que realmente se acostumbre a Maven, descubrirá que la administración de compilación casi no demora en absoluto.

Cómo empezar

El mejor lugar para comenzar es " Maven en 5 minutos ". Le ayudará a comenzar con un proyecto listo para que pueda codificar con todos los archivos y carpetas necesarios configurados (sí, le recomiendo usar el arquetipo de inicio rápido, al menos al principio).

Después de comenzar, querrá comprender mejor cómo se debe utilizar la herramienta. Por eso, " Better Builds with Maven " es el lugar más completo para entender las entrañas de cómo funciona, sin embargo, " Maven: The Complete Reference " está más actualizado. Lea el primero para comprender, pero luego use el segundo como referencia.

Trineo
fuente
12
Existen numerosos desarrolladores profesionales de Java que no usan Maven y se alegran de que no lo hagan; algunos de estos simplemente rechazan su complejidad e inflexibilidad y se quedan con Ant o similar, pero un número creciente de ellos son personas que se han mudado a los sucesores de Maven como Gradle y Buildr. Estos sucesores heredan de Maven la idea de proporcionar un poderoso conjunto de pasos de compilación listos para usar, pero también hacen que sea mucho más fácil agregar pasos personalizados. Dada su existencia, sinceramente, no creo que haya ninguna razón para usar Maven para nuevos proyectos.
Tom Anderson
55
Siempre está la cuestión de cuántos detalles poner en una respuesta, pero si usted es un desarrollador promedio de Java que en su oficina es probable que sea Maven o Ant Hell de mierda (Ant + bash + perl + computadora de construcción configurada con rutas mágicas). Si eres uno de los pocos afortunados que trabajan con desarrolladores de A + en un buen entorno con libertad para elegir, hay otras opciones (Gradle es una). Pero si está trabajando en un lugar promedio, Maven es la mejor herramienta que no permite que sus compañeros de trabajo se corten con algo puntiagudo.
Trineo el
44
No creo que tengas que ser un desarrollador A + para usar Gradle. No veo por qué una organización que podría adoptar Maven no podría adoptar Gradle. Es cierto que Gradle te permite dispararte en el pie, de la misma manera que lo hace Ant, pero de una manera que Maven hace bastante difícil (y tengo una colección de pies de tiro de mis colegas para probarlo); Esa es la compensación por hacer posible hacer cosas que Maven hace prácticamente imposible.
Tom Anderson
44
En términos de usar algo como Gradle y evitar pies de tiro, propongo una clasificación de selección de programadores. Algunos programadores no tendrán miedo de editar los scripts de compilación y hacer las cosas más o menos correctas. Esas personas son útiles. Algunos programadores tienen miedo de los scripts de compilación y no los tocan. Esas personas al menos no son dañinas; He estado en un equipo de 12 personas donde solo dos de nosotros nos atrevimos a tocar la construcción, y en realidad funcionó bastante bien. Algunos programadores no temen a los scripts de compilación, pero los arruinarán si los tocan. Esas personas son peligrosas.
Tom Anderson
1
así que es como npm para Java
KJW
9

Del documento de Sonatype :

La respuesta a esta pregunta depende de su propia perspectiva. La gran mayoría de los usuarios de Maven van a llamar a Maven una "herramienta de compilación": una herramienta utilizada para construir artefactos desplegables a partir del código fuente. Los ingenieros de construcción y los gerentes de proyecto pueden referirse a Maven como algo más completo: una herramienta de gestión de proyectos. ¿Cuál es la diferencia? Una herramienta de compilación como Ant se centra únicamente en el preprocesamiento, la compilación, el empaquetado, las pruebas y la distribución. Una herramienta de gestión de proyectos como Maven proporciona un superconjunto de características que se encuentran en una herramienta de compilación. Además de proporcionar capacidades de construcción, Maven también puede ejecutar informes, generar un sitio web y facilitar la comunicación entre los miembros de un equipo de trabajo.

Recomiendo encarecidamente mirar el documento de Sonatype y pasar un tiempo mirando los complementos disponibles para comprender el poder de Maven.

Muy brevemente, opera a un nivel conceptual más alto que (digamos) Ant. Con Ant, especificaría el conjunto de archivos y recursos que desea compilar, luego especificará cómo desea que se agrupen y especifique el orden en que debe ocurrir (clean / compile / jar). Con Maven todo esto está implícito. Maven espera encontrar sus archivos en lugares particulares, y trabajará automáticamente con eso. Por lo tanto, configurar un proyecto con Maven puede ser mucho más simple, ¡pero debes seguir las reglas de Maven!

Brian Agnew
fuente
No lo voté negativamente, pero quizás los votantes leyeron su cita de la propaganda de Sonatype como un respaldo implícito de la filosofía totalitaria de la "herramienta de gestión de proyectos" de Maven.
Tom Anderson
1
No creo que hayas respondido la pregunta de OP, sino que acabas de publicar la guía de marketing ... y esa guía es ridícula ya que la "gestión de proyectos" es mucho más que lo que hace Maven para confundir más de lo que ayuda, EN MI HUMILDE OPINIÓN.
Trineo el
2
@Brian Lo siento, si mi comentario anterior suena llamativo, pero déjame reformularlo: siento que tu comentario solo explica bien a Maven si ya entiendes lo que es Maven, pero como punto de partida inicial no es útil.
Trineo el
5

MavenEs una herramienta de construcción. Junto con Anto Gradleson Javaherramientas para la construcción.
Si eres un novato en Java, solo construye usando tu IDE ya que Maventiene una curva de aprendizaje empinada.

Cratilo
fuente
El soporte IDE para Maven en NetBeans es muy bueno, lo que hace que la curva de aprendizaje sea casi inexistente.
Capitán Jirafa