vertical setlayout manejo gridlayout definicion borderlayout java maven build build-process

setlayout - manejo de gridlayout en java



¿Por qué maven? ¿Cuales son los beneficios? (9)

Averiguar las dependencias del paquete realmente no es tan difícil. Raramente lo haces de todos modos. Probablemente una vez durante la configuración del proyecto y pocas más durante las actualizaciones. Con maven terminarás arreglando dependencias no coincidentes, poms mal escritos y haciendo exclusiones de paquetes de todos modos.

No es tan difícil ... para proyectos de juguetes. Pero los proyectos en los que trabajo tienen muchos, muchos de ellos, y estoy muy contento de obtenerlos de forma transitiva, para tener un esquema de nombres estandarizado para ellos. Administrar todo esto manualmente 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, esto es inherente a cualquier sistema que use dependencias (y aquí estoy hablando de las dependencias de Java en general).

Entonces, con Ant, tienes que hacer el mismo trabajo, excepto que tienes que 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á transitoriamente 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 ellas. si es necesario, controle la convergencia entre módulos, etc. No hay magia. Pero al menos tienes apoyo.

Y no olvide que la gestión de la dependencia es solo una pequeña parte de lo que Maven ofrece, hay mucho más (sin mencionar las otras herramientas que se integran muy bien con Maven, por ejemplo, Sonar ).

Ciclo Slow FIX-COMPILE-DEPLOY-DEBUG, que mata la productividad. Esta es mi principal queja. Haces un cambio, tienes que esperar a que la creación de maven se active y esperar a que se despliegue. Ningún despliegue caliente en absoluto.

Primero, ¿por qué usas a Maven así? Yo no. Uso mi IDE para escribir pruebas, código hasta que pasen, refactorice, implemente, implemente y ejecute una versión local de Maven cuando haya terminado, antes de confirmar, para asegurarme de no romper la compilación continua.

En segundo lugar, no estoy seguro de que usar Ant haría las cosas mucho mejor. Y para mi experiencia, las compilaciones modulares de Maven que usan dependencias binarias me dan un tiempo de compilación más rápido que las compilaciones de Ant monolíticas típicas. De todos modos, eche un vistazo a Maven Shell para un entorno Maven listo para (re) usar (que es impresionante por cierto).

Entonces, al final, y lamento decirlo, no es realmente Maven lo que está acabando con tu productividad, sino que estás haciendo un mal uso de tus herramientas. Y si no está satisfecho con eso, bueno, qué puedo decir, no lo use. Personalmente, estoy usando Maven desde 2003 y nunca miré hacia atrás.

¿Cuáles son los principales beneficios de usar maven comparado con, digamos, hormiga? Parece ser más una molestia que una herramienta útil. Uso maven 2, con Eclipse Java EE simple (sin m2eclipse) y tomcat.

Los partidarios de maven creen que

  1. Maven le permite obtener las dependencias de su paquete fácilmente

  2. Maven te obliga a tener una estructura de directorio estándar

En mi experiencia

  1. Averiguar las dependencias del paquete realmente no es tan difícil. Raramente lo haces de todos modos. Probablemente una vez durante la configuración del proyecto y pocas más durante las actualizaciones. Con maven terminarás arreglando dependencias no coincidentes, poms mal escritos y haciendo exclusiones de paquetes de todos modos.

  2. Ciclo Slow FIX-COMPILE-DEPLOY-DEBUG, que mata la productividad. Esta es mi principal queja. Haces un cambio, tienes que esperar a que la creación de maven se active y esperar a que se despliegue. Ningún despliegue caliente en absoluto.

¿O lo estoy haciendo mal? Por favor, apúntame en la dirección correcta, soy todo oídos.


Descubrir dependencias para proyectos pequeños no es difícil. Pero una vez que empiezas a ocuparte de un árbol de dependencias con cientos de dependencias, las cosas pueden salir de control fácilmente. (Estoy hablando por experiencia aquí ...)

El otro punto es que si usa un IDE con compilación incremental y compatibilidad con 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.


Esto debería haber sido un comentario, pero no encajaba en la longitud de un comentario, así que lo publiqué como una respuesta.

Todos los beneficios mencionados en otras respuestas se pueden lograr por medios más simples que usar maven. Si, por ejemplo, es nuevo en un proyecto, de todos modos pasará más tiempo creando la arquitectura del proyecto, uniendo componentes, codificando que descargando frascos y copiándolos en 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 mientras se hace automáticamente la "gestión de la dependencia".

Solo tengo conocimiento de nivel intermedio de maven, pero te digo que he hecho grandes proyectos (como ERP) sin utilizar maven.


Las ventajas de Maven sobre la hormiga son bastantes. Intento resumirlos aquí.

Convención sobre configuración
Maven utiliza un enfoque distintivo para el diseño y el inicio del proyecto, que hace que sea fácil simplemente saltar en un proyecto. Por lo general, solo se necesitan checkount y el comando maven para obtener los artefactos del proyecto.

Modularización de proyecto
Las convenciones de proyectos sugieren (o mejor dicho, fuerzan) al desarrollador 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 gestió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 administración de la dependencia es bastante fácil, y nuevamente se ve obligado a pensar en términos de Project Lifecycle: versiones de componentes, administración de versiones, etc. Un poco más complejo que la hormiga, pero una vez más, una mejora en la calidad del proyecto.

¿Qué pasa con maven?
Maven no es fácil. El ciclo de compilación (lo que se hace y cuándo) no es tan claro dentro del POM. Además, surge algún problema con la calidad de los componentes y las dependencias faltantes en los repositorios públicos.
El mejor enfoque (para mí) es tener un repositorio interno para almacenar en caché (y mantener) las dependencias, y aplicarlo a la gestión de versiones de los componentes. Para proyectos más grandes que los proyectos de muestra en un libro, le agradecerá a maven antes o después


Maven es una de las herramientas en las que debes decidir de antemano que te gusta y quieres usarla, ya que pasarás bastante tiempo aprendiéndola, y habiendo tomado dicha decisión de una vez por todas te permitirá omitir todo tipo de duda mientras aprendes (¡porque te gusta y quieres usarlo)!

Las fuertes convenciones ayudan en muchos lugares, como Hudson, que pueden 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 principales IDE pueden usar las fuentes de forma inmediata. En otras palabras, usar maven hace que tu compilación sea independiente de IDE. Esto permite, por ejemplo, usar perfiles de Netbeans incluso si normalmente trabaja en eclipse


Maven es una poderosa herramienta de gestión de proyectos que se basa en POM (modelo de objeto de proyecto). Se utiliza para la construcción de proyectos, la dependencia y la documentación. Simplifica el proceso de compilación como ANT. Pero está demasiado avanzado que ANT. Maven ayuda a gestionar: compilaciones, documentación, revisión, SCM, versiones, distribución. - El repositorio maven es un directorio del archivo JAR empaquetado con el archivo pom.xml. Maven busca dependencias en los repositorios.


Maven puede considerarse una herramienta de desarrollo de proyectos completa, no solo una herramienta de construcción como Ant. Debería usar Eclipse IDE con el complemento maven para solucionar todos sus problemas.

Aquí hay algunas ventajas de Maven, citadas en los beneficios de usar la página de Maven :

Henning

  • configuración rápida del proyecto, sin complicados archivos build.xml, solo un POM e ir
  • todos los desarrolladores en un proyecto usan las mismas dependencias de jar debido a POM centralizado.
  • obtener una cantidad de informes y métricas para un proyecto "gratis"
  • reducir el tamaño de las distribuciones fuente, ya que las jarras se pueden extraer desde una ubicación central

Emmanuel Venisse

  • muchos objetivos están disponibles, por lo que no es necesario desarrollar una parte específica del proceso de compilación contrariamente a ANT, podemos reutilizar las tareas ANT existentes en el proceso de compilación con un plugin antrun

Jesse Mcconnell

  • Promueve el diseño modular de código. al simplificar la gestión de múltiples proyectos, permite que el diseño se distribuya en múltiples partes lógicas, tejiendo estas partes mediante el uso del seguimiento de dependencias en archivos pom.
  • Aplica el diseño modular de código. es fácil pagar el servicio de labios a un código modular, pero cuando el código está en proyectos de compilación separados es imposible cruzar referencias de polinización entre módulos de código a menos que lo permita específicamente en su gestión de dependencias ... no hay ''lo voy a hacer''. solo haz esto ahora y arréglalo más tarde ''implementaciones.
  • La gestión de la dependencia está claramente declarada. con el mecanismo de administración de dependencias, tienes que intentar arruinar tu versión de jar ... no existe el problema clásico de ''¿qué versión de este jar de proveedor es esta?'' Y configurarlo en un proyecto existente arranca la parte superior del lío existente si existe cuando te fuerzan a hacer versiones "desconocidas" en tu repositorio para que todo funcione ... o te mientas a ti mismo que sabes el versión real de ABC.jar.
  • ciclo de vida fuertemente tipado existe un ciclo de vida definido y definido desde el inicio de una construcción hasta el final ... y los usuarios pueden mezclar y combinar su sistema con el ciclo de vida en lugar de improvisar su propio ciclo de vida. Esto tiene el beneficio adicional de permitir que las personas pasen de un proyecto a otro y hablar usando el mismo vocabulario en términos de creación de software.

Vincent Massol

  • Mayor impulso: Ant ahora es heredado y no avanza rápidamente. Maven está avanzando rápidamente y existe el potencial de tener muchas herramientas de gran valor en torno a Maven (CI, proyecto de Dashboard, integración IDE, etc.).

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 alcanzar una mayor tasa de éxito. Para una visión más detallada de cómo Maven puede ayudarle con su proceso de desarrollo, consulte Los beneficios de usar Maven.


Nunca me he encontrado con el punto 2? ¿Puede explicar por qué cree que esto afecta la implementación de alguna manera? Si algo te permite estructurar tus proyectos de una manera modular que realmente permite soluciones calientes para errores en un nivel particular, y permite el desarrollo independiente de una API del resto del proyecto, por ejemplo.

Es posible que intentes meter todo en un único módulo, en cuyo caso el problema no es realmente absoluto, sino la forma en que lo estás usando.