¿Cuáles son los principales beneficios de usar maven en comparación con digamos hormiga? Parece ser más una molestia que una herramienta útil. Utilizo maven 2, con Eclipse Java EE simple (sin m2eclipse) y tomcat.
Los partidarios de Maven creen que
Maven te permite obtener fácilmente las dependencias de tus paquetes
Maven te obliga a tener una estructura de directorio estándar
En mi experiencia
Averiguar las dependencias del paquete no es realmente tan difícil. Raramente lo haces de todos modos. Probablemente una vez durante la configuración del proyecto y algunas más durante las actualizaciones. Con Maven, terminarás arreglando dependencias no coincidentes, poms mal escritos y haciendo exclusiones de paquetes de todos modos.
Lento ciclo FIX-COMPILE-DEPLOY-DEBUG, que mata la productividad. Esta es mi queja principal. Realizas un cambio, tienes que esperar a que comience la construcción de Maven y esperar a que se implemente. Sin despliegue en caliente en absoluto.
¿O simplemente lo estoy haciendo mal? Por favor, apúntame en la dirección correcta, soy todo oídos.
fuente
Respuestas:
No es tan difícil ... para proyectos de juguetes. Pero los proyectos en los que trabajo tienen muchos, muchos, y estoy muy contento de obtenerlos de manera transitiva, de tener un esquema de nombres estandarizado para ellos. Gestionar todo esto manualmente a mano sería una pesadilla.
Y sí, a veces tienes que trabajar en la convergencia de dependencias. Pero piénselo dos veces, esto no es inherente a Maven, es inherente a cualquier sistema que use dependencias (y estoy hablando de las dependencias de Java en general aquí).
Entonces, con Ant, debe hacer el mismo trabajo, excepto que debe hacer todo manualmente: tomar alguna versión del proyecto A y sus dependencias, tomar alguna versión del proyecto B y sus dependencias, averiguar qué versiones exactas usan, verificar que no se superponen, comprobando que no son incompatibles, etc. Bienvenido al infierno.
Por otro lado, Maven admite la gestión de dependencias y las recuperará de forma transitiva para mí y me proporciona las herramientas que necesito para gestionar la complejidad inherente a la gestión de dependencias : puedo analizar un árbol de dependencias, controlar las versiones utilizadas en dependencias transitivas, excluir algunas de ellos si es necesario, controlar la converger en módulos, etc. no hay magia. Pero al menos tienes apoyo.
Y no olvide que la gestión de dependencias es solo una pequeña parte de lo que ofrece Maven, hay mucho más (sin mencionar las otras herramientas que se integran muy bien con Maven, por ejemplo, Sonar ).
Primero, ¿por qué usas Maven así? Yo no. Utilizo mi IDE para escribir pruebas, codificar hasta que pasen, refactorizar, implementar, implementar en caliente y ejecutar una compilación local de Maven cuando haya terminado, antes de comprometerme, para asegurarme de que no romperé la compilación continua.
En segundo lugar, no estoy seguro de que usar Ant mejoraría mucho las cosas. Y según mi experiencia, las compilaciones modulares de Maven que utilizan dependencias binarias me dan un tiempo de compilación más rápido que las compilaciones típicas de Ant monolíticas. De todos modos, eche un vistazo a Maven Shell para un entorno listo para (re) usar Maven (que por cierto es increíble).
Así que al final, y lamento decirlo, no es realmente Maven lo que está matando su productividad, es el uso indebido de sus herramientas. Y si no estás contento con eso, bueno, qué puedo decir, no lo uses. Personalmente, uso Maven desde 2003 y nunca miré hacia atrás.
fuente
Maven puede considerarse como una herramienta de desarrollo de proyectos completa, no solo una herramienta de construcción como Ant. Debe usar Eclipse IDE con el complemento Maven para solucionar todos sus problemas.
Aquí hay algunas ventajas de Maven, citadas en la página Beneficios de usar Maven :
fuente
Averiguar dependencias para pequeños proyectos no es difícil. Pero una vez que comience a lidiar con un árbol de dependencia con cientos de dependencias, las cosas pueden salirse fácilmente de control. (Estoy hablando por experiencia aquí ...)
El otro punto es que si usa un IDE con compilación incremental y soporte Maven (como Eclipse + m2eclipse), entonces debería poder configurar editar / compilar / implementar en caliente y probar.
Yo personalmente no hago esto porque he llegado a desconfiar de este modo de desarrollo debido a malas experiencias en el pasado (pre Maven). Quizás alguien pueda comentar si esto realmente funciona con Eclipse + m2eclipse.
fuente
Maven es una de las herramientas en las que necesita decidir de antemano si le gusta y quiere usarlo, ya que pasará bastante tiempo aprendiéndolo, y haber tomado dicha decisión de una vez por todas le permitirá omitir todo tipo de dudas mientras aprendes (¡porque te gusta y quieres usarlo!)
Las convenciones fuertes ayudan en muchos lugares, como Hudson, que puede hacer maravillas con los proyectos de Maven, pero puede ser difícil de ver al principio.
editar: a partir de 2016, Maven es la única herramienta de compilación de Java donde los tres IDE principales pueden usar las fuentes de fábrica. En otras palabras, el uso de maven hace que su compilación sea independiente de IDE. Esto permite, por ejemplo, usar perfiles Netbeans incluso si normalmente trabaja en eclipse
fuente
Las ventajas de Maven sobre las hormigas son bastantes. Intento resumirlos aquí.
La Convención sobre la configuración de
Maven utiliza un enfoque distintivo para el diseño y el inicio del proyecto, que facilita el salto a un proyecto. Por lo general, solo se necesita el comando checkount y el comando maven para obtener los artefactos del proyecto.
Modularización del
proyecto Las convenciones del proyecto sugieren (o mejor, obligan) al desarrollador a modularizar el proyecto. En lugar de un proyecto monolítico, a menudo se ve obligado a dividir su proyecto en subcomponentes más pequeños, lo que facilita la depuración y la administración de la estructura general del proyecto.
Gestión de dependencias y ciclo de vida del proyecto
En general, con una buena configuración de SCM y un repositorio interno, la gestión de dependencias es bastante fácil, y nuevamente se ve obligado a pensar en términos de Project Lifecycle: versiones de componentes, gestión de versiones, etc. Un poco más complejo que la hormiga algo, pero de nuevo, una mejora en la calidad del proyecto.
¿Qué le pasa a Maven?
Maven no es fácil. El ciclo de construcción (qué se hace y cuándo) no está tan claro dentro del POM. Además, surgen algunos problemas con la calidad de los componentes y las dependencias que faltan en los repositorios públicos.
El mejor enfoque (para mí) es tener un repositorio interno para almacenar en caché (y mantener) las dependencias, y aplicar para la gestión de liberación de componentes. Para proyectos más grandes que los proyectos de muestra en un libro, agradecerá a maven antes o después
fuente
Maven puede proporcionar beneficios para su proceso de construcción mediante el uso de convenciones y prácticas estándar para acelerar su ciclo de desarrollo y, al mismo tiempo, ayudarlo a lograr una mayor tasa de éxito. Para una visión más detallada de cómo Maven puede ayudarlo con su proceso de desarrollo, consulte Los beneficios de usar Maven.
fuente
Maven es una poderosa herramienta de gestión de proyectos que se basa en POM (modelo de objetos de proyecto). Se utiliza para proyectos de construcción, dependencia y documentación. Simplifica el proceso de construcción como ANT. Pero está demasiado avanzado que ANT. Maven ayuda a gestionar: Compilaciones, Documentación, Reporing, SCM, Lanzamientos, Distribución. - El repositorio maven es un directorio de archivos JAR empaquetados con el archivo pom.xml. Maven busca dependencias en los repositorios.
fuente
Nunca he encontrado el punto 2? ¿Puede explicar por qué cree que esto afecta la implementación de alguna manera? Si algo le permite estructurar sus proyectos de una manera modular que realmente permita soluciones rápidas para errores en un nivel particular, y permite el desarrollo independiente de una API del resto del proyecto, por ejemplo.
Es posible que esté intentando agrupar todo en un solo módulo, en cuyo caso el problema no es realmente maven, sino la forma en que lo está utilizando.
fuente
Esto debería haber sido un comentario, pero no encajaba en la longitud de un comentario, así que lo publiqué como respuesta.
Todos los beneficios mencionados en otras respuestas son alcanzables por medios más simples que el uso de Maven. Si, por ejemplo, es nuevo en un proyecto, de todos modos pasará más tiempo creando arquitectura de proyecto, uniendo componentes, codificando que descargando archivos jar y copiándolos a la carpeta lib. Si tiene experiencia en su dominio, ya sabe cómo comenzar el proyecto con qué bibliotecas. No veo ningún beneficio de usar maven, especialmente cuando plantea muchos problemas al hacer automáticamente la "gestión de dependencias".
Solo tengo conocimiento de nivel intermedio de maven, pero te digo que he realizado grandes proyectos (como ERP) sin usar maven.
fuente