java - reseteo - liberar zte z835 gratis
¿Por qué Maven tiene un mal representante? (30)
Se habla mucho en internet sobre cómo Maven es malo. He estado utilizando algunas características de Maven durante algunos años y el beneficio más importante en mi opinión es la gestión de la dependencia.
La documentación de Maven es menos que adecuada, pero generalmente cuando necesito lograr algo lo resuelvo una vez y luego funciona (por ejemplo, cuando implementé la firma de los frascos). No creo que Maven sea genial, pero resuelve algunos problemas que sin eso sería un dolor genuino.
Entonces, ¿por qué Maven tiene un representante tan malo y qué problemas con Maven puedo esperar en el futuro? Tal vez hay alternativas mucho mejores que yo no conozco. (Por ejemplo, nunca miré a Ivy en detalle).
NOTA: Esto no es un intento de causar un argumento. Es un intento de limpiar el FUD.
Al igual que Glenn, no creo que Maven tenga un mal representante, sino un representante mixto. Llevo 6 meses trabajando exclusivamente tratando de migrar un proyecto de proyecto bastante grande a Maven y muestra claramente los límites de la herramienta.
En mi experiencia, Maven es bueno para:
- gestión de dependencias externas
- gestión centralizada de la construcción (herencia pom)
- muchos complementos para muchas cosas
- muy buena integración con herramientas de integración continua
- muy buenas capacidades de reporte (FindBugs, PMD, Checkstyle, Javadoc, ...)
Y tiene algunos problemas con:
- todo o nada se acerca (difícil de migrar lentamente a Maven)
- dependencias complejas, dependencias intermodulares
- dependencias cíclicas (lo sé, mal diseño, pero no podemos arreglar 5 años de desarrollo ...)
- coherencia (los rangos de versión no funcionan igual en todas partes)
- errores (de nuevo con rangos de versión)
- compilaciones reproducibles (a menos que arregle el número de versiones de todos los complementos, no puede estar seguro de que obtendrá la misma compilación en 6 meses)
- falta de documentación (el documento es bastante bueno para los conceptos básicos, pero no hay muchos ejemplos de cómo manejar proyectos grandes)
Para dar un contexto, hay alrededor de 30 desarrolladores trabajando en este proyecto, y el proyecto ha existido por más de 5 años, por lo tanto: gran cantidad de legado, muchos procesos ya en marcha, muchas herramientas de propiedad personalizadas ya instaladas. Decidimos intentar migrar a Maven porque el costo de mantener nuestras herramientas patentadas era demasiado alto.
Algunas de mis mascotas se enojan con Maven:
La definición XML es súper torpe y prolija. ¿Nunca han oído hablar de los atributos?
En su configuración predeterminada, siempre recorre la ''red en cada operación. Independientemente de si esto es útil para cualquier cosa, parece extremadamente tonto necesitar acceso a Internet para "limpiar".
Nuevamente, de forma predeterminada, si no tengo cuidado de especificar los números de versión exactos, extraerá las últimas actualizaciones de la red, independientemente de si estas versiones más recientes presentan errores de dependencia. En otras palabras, estás a merced de la gestión de la dependencia de otras personas.
La solución para todo este acceso a la red es apagarlo agregando la opción
-o
. ¡Pero debe recordar apagarlo si realmente desea hacer una actualización de dependencia!Otra solución es instalar su propio servidor de "control de origen" para las dependencias. Sorpresa: la mayoría de los proyectos ya tienen control de fuente, ¡solo eso funciona sin configuración adicional!
Las versiones de Maven son increíblemente lentas. Jugar con actualizaciones de red alivia esto, pero las compilaciones de Maven son todavía lentas. Y horriblemente detallado.
El plugin Maven (M2Eclipse) se integra muy mal con Eclipse. Eclipse se integra razonablemente sin problemas con el software de control de versiones y con Ant. La integración de Maven es muy torpe y fea en comparación. ¿Mencioné lento?
Maven sigue teniendo errores. Los mensajes de error no son útiles. Demasiados desarrolladores están sufriendo por esto.
Amo a Maven: aumenta la productividad, y estoy muy contento de que ya no use Ant (phew!)
Pero si pudiera cambiar las cosas, sería:
- Hacer que el archivo
pom.xml
menos detallado - Facilite la inclusión de .jars en el repositorio.
Buena pregunta. Acabo de comenzar un gran proyecto en el trabajo y parte de los proyectos anteriores era introducir modularidad a nuestra base de código.
He oído cosas malas sobre maven. De hecho, es todo lo que he escuchado sobre él. Busqué introducirlo para resolver la pesadilla de dependencia que estamos experimentando actualmente. El problema que he visto con Maven es que es bastante rígido en su estructura, es decir, debe ajustarse a su diseño de proyecto para que funcione para usted.
Sé lo que la mayoría de la gente dirá: no tienes que conformarte con la estructura. De hecho, eso es cierto, pero no lo sabrás hasta que hayas superado la curva inicial de aprendizaje, momento en el que has invertido demasiado tiempo para ir y tirarlo todo a la basura.
La hormiga se usa mucho en estos días, y me encanta. Teniendo eso en cuenta, me topé con un administrador de dependencia poco conocido llamado Ivy . Ivy se integra muy bien en Ant y es fácil y rápido obtener la configuración básica de recuperación de JAR y trabajar. Otro beneficio de Ivy es que es muy poderoso pero bastante transparente; puedes transferir compilaciones usando mecanismos como scp o ssh con bastante facilidad; Recuperación de dependencia de ''cadena'' sobre sistemas de archivos o repositorios remotos (la compatibilidad con repo de Maven es una de sus características populares).
Dicho todo esto, me resultó muy frustrante usarlo al final: la documentación es en abundancia, pero está escrito en mal inglés, lo que puede aumentar la frustración cuando se depura o se intenta resolver lo que salió mal.
Volveré a visitar Apache Ivy en algún momento de este proyecto y espero que funcione correctamente. Una cosa que hizo fue permitirnos, como equipo, determinar de qué bibliotecas dependemos y obtener una lista documentada.
En definitiva, creo que todo se reduce a cómo trabajas como individuo / equipo y lo que necesitas para resolver tus problemas de dependencia.
Es posible que encuentre útiles los siguientes recursos relacionados con Ivy:
Ciertamente he chateado y gemido sobre maven en el pasado. Pero ahora, no estaría sin eso. Siento que los beneficios superan con creces cualquier problema. Principalmente:
- Estructura de proyecto estandarizada.
- Dado un nuevo desarrollador unirse a un proyecto:
- Cuando dices que es un proyecto de Maven, el desarrollador conoce el diseño del proyecto y cómo construir y empaquetar el proyecto
- Cuando diga que es un proyecto Ant, el desarrollador deberá esperar a que explique más o tendrá que pasar por el archivo build.xml para resolverlo.
- Por supuesto, siempre es posible imponerse en el estándar de toda la compañía con Ant, pero creo que la mayoría de las veces, volverás a inventar la rueda proverbial.
- Dado un nuevo desarrollador unirse a un proyecto:
- Gestión de la dependencia
- No solo con bibliotecas externas sino también con bibliotecas / módulos internos. Asegúrese de utilizar un servidor proxy de repositorio Maven como Nexus o Artifactory .
- Es posible hacer algo de esto con Ivy . De hecho, si todo lo que necesita es una administración de dependencia, probablemente sea mejor que use Ivy.
- Particularmente dentro de un proyecto. Me pareció bastante útil crear subproyectos pequeños, y maven lo maneja bien. Es mucho más difícil con la hormiga.
- Manejo de artefactos estandarizados (especialmente en conjunción con Nexus o Artifactory )
- El complemento de lanzamiento es maravilloso.
- La integración de Eclipse y NetBeans es bastante buena.
- La integración con hudson es excelente. Particularmente los gráficos de tendencia para cosas como findbugs.
- Es un punto menor, pero el hecho de que maven incorpore detalles como el número de versión dentro del jar o war (no solo en el nombre del archivo) de forma predeterminada es tremendamente útil.
Los inconvenientes para mí son principalmente:
- La línea de comando es bastante inútil. Esto me desilusionó mucho para empezar.
- El formato XML es muy detallado. Puedo ver por qué fue hecho de esa manera, pero aún me duele leerlo.
- Dicho esto, tiene un XSD para una fácil edición en un IDE.
- Es difícil entenderlo al principio. Cosas como el ciclo de vida, por ejemplo.
- La guía definitiva para maven es una buena introducción, sin embargo.
Realmente creo que vale la pena perder un poco de tiempo para conocer a maven.
Creo que Maven tiene una mala reputación porque impone una estructura en su proyecto, mientras que otras herramientas como Ant le permiten definir completamente la estructura de la forma que desee. También estoy de acuerdo en que la documentación es mala, pero creo que la mala reputación que tiene Maven es porque la gente está tan acostumbrada a Ant.
Creo que tiene una mala reputación entre las personas que tienen los proyectos más simples y más complicados.
Si está compilando un único WAR desde una única base de código, lo obliga a mover la estructura de su proyecto y a listar manualmente los dos o tres tarros en el archivo POM.
Si está construyendo un EAR de un conjunto de nueve prototipos de archivos EAR con alguna combinación de cinco archivos WAR, tres EJB y otras 17 herramientas, jar de dependencia y configuraciones que requieren ajustar MANIFEST.MF y archivos XML en recursos existentes durante la compilación final; entonces Maven probablemente sea demasiado restrictivo. Tal proyecto se convierte en un lío de perfiles anidados complicados, archivos de propiedades y mal uso de los objetivos de compilación Maven y la designación del clasificador.
Entonces, si estás en el 10% inferior de la curva de complejidad, es exagerado. En el 10% superior de esa curva, estás en una camisa de fuerza.
El crecimiento de Maven se debe a que funciona bien para el 80% medio
Demasiada magia.
El problema más importante para mí es que Maven, cuando no está configurado correctamente, puede no producir compilaciones repetibles, debido a:
- repositorios remotos poco confiables;
- dependencias en complementos y bibliotecas con versiones de SNAPSHOT o sin versiones.
Contraste esto con una construcción de hormigas que, aunque es IMO prolijo y tedioso, funciona ya que todos los frascos se controlan localmente.
La parte buena es que los problemas son direccionables:
- use su propio repositorio maven, que se ha vuelto completamente simple, estoy usando Archiva con buenos resultados;
- siempre versione apropiadamente sus dependencias. Maven ha comenzado a bloquear las versiones de los complementos en el super-POM comenzando con 2.0.8 o 2.0.9 y todas sus dependencias deberían estar en las versiones lanzadas.
Es más complicado que el idioma que usaste para escribir tu proyecto. Configurarlo correctamente es más difícil que la programación real.
Hay muchas razones por las que a la gente no le gusta Maven, pero reconozco que son muy subjetivos . Maven hoy en día con algunos libros buenos (y gratuitos), mejor documentación, un conjunto de complementos biger y muchas construcciones de proyectos referenciales exitosos no es el mismo Maven que hace uno o dos años.
Usar Maven en proyectos simples es muy fácil, con los más grandes / complicados se necesita más conocimiento y una mayor comprensión de la filosofía de Maven, tal vez a nivel de empresa un puesto para Maven guru como administrador de red. La fuente principal de Maven odia las declaraciones son a menudo ignorancia .
Otro inconveniente para Maven es la falta de flexibilidad como, por ejemplo, en Ant. Pero recuerde que Maven tiene un conjunto de convenciones, apegarse a ellas parece ser difícil al principio, pero al final a menudo se salvan de los problemas.
El éxito actual de Maven demuestra su valor. Por supuesto, nadie es perfecto y Maven tiene algunos contras y sus caprichos, pero en mi opinión, Maven mueve lentamente a sus oponentes.
La respuesta corta: me ha resultado muy difícil mantener un sistema de compilación Maven, y me gustaría cambiar a Gradle lo antes posible.
He estado trabajando con Maven durante más de cuatro años. Me llamaría un experto en sistemas de compilación porque en las últimas (al menos) cinco empresas en las que he estado, realicé renovaciones importantes en la infraestructura de compilación / implementación.
Algunas de las lecciones que aprendí:
- La mayoría de los desarrolladores tienden a no perder mucho tiempo pensando en construir sistemas; como resultado, la construcción se convierte en un desastre de espaguetis de hacks, pero lo aprecian cuando ese lío se limpia y se racionaliza.
- Al tratar con la complejidad, prefiero tener un sistema transparente que expone la complejidad (como Ant) que uno que intenta simplificar las cosas complejas imponiendo restricciones rígidas, como Maven. Piensa en Linux vs. Windows.
- Maven tiene muchos agujeros en la funcionalidad que requieren soluciones bizantinas. Esto lleva a archivos POM que son incomprensibles y no se pueden mantener.
- Ant es súper flexible y comprensible, pero los archivos Ant también pueden ser muy grandes, porque tienen un nivel muy bajo.
- Para cualquier proyecto importante, los desarrolladores tienen que crear su propia estructura de compilación / implementación más allá de lo que proporciona la herramienta; la idoneidad de la estructura para el proyecto tiene mucho que ver con lo fácil que es mantenerla. Las mejores herramientas te ayudarán a crear una estructura y no a luchar contra ti.
He investigado un poco a Gradle y parece que tiene el potencial de ser lo mejor de ambos mundos, lo que permite una combinación de descripción de compilación declarativa y de procedimiento.
Maven es genial. La razón de su reputación tiene que ver con la curva de aprendizaje empinada, en mi opinión. (que finalmente estoy cerca de superar)
La documentación es un poco difícil de atravesar, simplemente porque parece que hay mucho texto y cosas nuevas que comprender antes de que empiece a tener sentido. Yo digo que el tiempo es todo lo que se necesita para que Maven sea más elogiado.
Me gusta maven Lo he usado desde la pre 1.0. Es una herramienta poderosa que, en conjunto, me ha ahorrado una cantidad de tiempo considerable y ha mejorado mi infraestructura de desarrollo. Pero puedo entender la frustración que algunas personas tienen. Veo 3 tipos de frustración:
- donde las causas son preocupaciones reales (p. ej., POM prolijas, sin documentación),
- algunos son información errónea (por ejemplo, "tienes que tener una conexión a Internet para compilar" - no es verdad - no, esto se puede evitar),
- parte de ella se ventila en maven, pero realmente otra persona es culpable ("no dispare al mensajero").
Para el primer caso, problemas reales - bueno, claro, hay problemas, los POM son detallados, la documentación podría ser mejor. Sin embargo, a pesar de esto, es posible obtener buenos resultados con Maven en tiempo rápido. Me estremezco cada vez que obtengo un proyecto creado con hormiga, y trato de importarlo a mi IDE. Puede llevar mucho tiempo configurar la estructura del directorio. con maven, es solo un caso de abrir el archivo POM en el IDE.
Para el segundo caso, Maven es complejo y los malentendidos son comunes. Si maven 3 puede encontrar una manera de abordar esta complejidad (o incluso la complejidad percibida) eso sería bueno. maven sí requiere una inversión considerable, pero, en mi experiencia, la inversión se amortiza rápidamente.
Para el último punto, creo que la queja sobre las dependencias transitivas de Maven es probablemente el mejor ejemplo conocido.
Las dependencias transitivas son la naturaleza del software real que emplea la reutilización. Las DLL de Windows, los paquetes de Debian, los paquetes de Java, los paquetes de OSGi, incluso el archivo de encabezado C ++ incluyen todas las dependencias y sufren el problema de dependencia. Si tiene dos dependencias y cada una usa una versión diferente de la misma, entonces debe intentar resolverlo de alguna manera. Maven no intenta resolver el problema de dependencia, sino que lo pone en primer plano y proporciona herramientas para ayudar a gestionar el problema, como informar conflictos y proporcionar dependencias consistentes para una jerarquía de proyectos, y de hecho proporciona un control absoluto sobre las dependencias de un proyecto.
El enfoque de incluir dependencias manualmente con cada proyecto (un póster dice que verifica todas las dependencias en el control de código fuente) corre el riesgo de utilizar una dependencia incorrecta, como actualizaciones pasadas por alto cuando se actualiza una biblioteca sin registrar las actualizaciones de sus dependencias. Para un proyecto de cualquier tamaño, administrar dependencias manualmente seguramente conducirá a errores. Con maven, puede actualizar la versión de la biblioteca que utiliza y se incluyen las dependencias correctas. Para la gestión del cambio, puede comparar el antiguo conjunto de dependencias (para su proyecto como un todo) con el nuevo conjunto, y cualquier cambio puede ser cuidadosamente analizado, probado, etc.
Maven no es la causa del problema de dependencia, pero lo hace más visible. Al abordar los problemas de dependencia, maven hace que los "ajustes" de dependencia sean explícitos (un cambio en su POM anulando la dependencia), en lugar de implícitos, como es el caso de los jar administrados manualmente en el control de versiones, donde los frascos están simplemente presentes, sin nada para soportar el tiempo son la dependencia correcta o no.
Me gustaría contrarrestar algunas de las quejas formuladas en este foro:
Maven es todo o nada. O al menos hasta donde pude ver en la documentación. No se puede usar fácilmente maven como un reemplazo directo para hormiga, y adoptar gradualmente características más avanzadas.
Esto no es verdad El gran triunfo de Maven es usarlo para administrar sus dependencias de una manera racional y si quiere hacer eso en maven y hacer todo lo demás de manera eficaz, puede hacerlo. Así es cómo:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
Ahora tiene un objeto classpath llamado ''maven.classpath'' que contiene todas las dependencias maven definidas en el archivo pom. Todo lo que necesita es colocar el archivo jar de tareas de antigüedades en el directorio lib de su hormiga.
Maven hace que tu proceso de compilación dependa de tu conexión de red.
La dependencia predeterminada y el proceso de captación de complementos depende de una conexión de red, sí, pero solo para la compilación inicial (o si cambia las dependencias o los complementos en uso). Después de eso, todos los frascos se almacenan en caché localmente. Y si quiere forzar una conexión sin red, puede decirle a maven que use el modo fuera de línea.
Te impone una estructura rígida desde el principio.
No está claro si esto se refiere al formato de archivo o al problema ''convención versus configuración''. Para este último, hay una gran cantidad de valores predeterminados invisibles, como la ubicación esperada de los recursos y los archivos fuente de Java, o la compatibilidad de la fuente. Pero esto no es rigidez, es poner en valores predeterminados razonables para usted, por lo que no tiene que definirlos explícitamente. Todos los ajustes se pueden anular con bastante facilidad (aunque para un principiante puede ser difícil encontrar en la documentación cómo cambiar ciertas cosas).
Si estás hablando del formato de archivo, bueno eso está cubierto en la respuesta a la siguiente parte ...
Está basado en XML, por lo que es tan difícil de leer como ANT.
En primer lugar, no veo cómo se puede quejar de que algún aspecto de algo "No es mejor que una hormiga" es una justificación para que tenga una mala reputación. En segundo lugar, si bien sigue siendo XML, el formato del XML está mucho más definido. Además, debido a su definición, es mucho más fácil hacer un editor de cliente grueso sensible para un POM. He visto páginas con largos guiones de compilación de hormigas que saltan por todos lados. Cualquier editor de script de compilación de ant no hará que esto sea más aceptable, solo otra larga lista de tareas interconectadas presentadas de una manera ligeramente diferente.
Habiendo dicho eso, hay algunas quejas que he visto aquí que tienen o han tenido cierta validez, siendo el más grande
- La documentación es pobre / falta
- Construcciones reproducibles
- La integración de Eclipse es mala
- Loco
Para lo cual mi respuesta es doble. En primer lugar, Maven es una herramienta mucho más joven que Ant o Make, por lo que debe esperar que lleve tiempo alcanzar el nivel de madurez de esas aplicaciones. La segunda es, bueno, si no te gusta, arréglalo . Es un proyecto de código abierto y lo uso, y luego me quejo de algo que cualquiera puede ayudarme a resolver me parece bastante estúpido. ¿No te gusta la documentación? Contribuya para que sea más claro, más completo o más accesible para un principiante.
El problema de compilaciones reproducibles se divide en dos problemas: rangos de versión y actualizaciones automáticas del complemento Maven. Para el complemento, upa, a menos que esté seguro de que cuando reconstruya un proyecto un año después, esté utilizando exactamente el mismo JDK y la misma versión de Ant, bien, este es el mismo problema con un nombre diferente. Para los rangos de versiones, recomiendo trabajar en un complemento que produzca un pom temporal con versiones bloqueadas para todas las dependencias directas y transitorias y hacer que forme parte del ciclo de vida de lanzamiento de maven. De esta manera, tus poms de compilación de lanzamiento son siempre descripciones exactas de todas las dependencias.
Me he esforzado en la mayoría / todos los negativos mencionados aquí, y objeciones similares de compañeros de equipo, y estoy de acuerdo con todos ellos. Pero lo he mantenido y lo seguiré manteniendo firme el único objetivo que solo maven (o gradle tal vez) realmente cumple.
Si está optimizando para sus pares ( desarrolladores de código abierto), ant / make / whatever lo hará. Si está entregando funcionalidades a personas que no son iguales ( usuarios ), solo harán maven / gradle / etc.
Solo maven le permite liberar un pequeño paquete de código fuente + poms (no contiene lib incrustados ni archivos de dependencia binarios con nombres crípticos ni información de dependencia) con un diseño de proyecto estándar bien documentado que cualquier IDE puede cargar por alguien que no haya absorbido las convenciones de diseño idiosincrásico de los desarrolladores. Y hay un procedimiento de instalación de un botón (mvn install) que crea todo mientras adquiere las dependencias que faltan.
El resultado es una entrada fácil que los usuarios pueden seguir para encontrar el camino hacia el código, donde los poms pueden dirigirlos hacia la documentación relevante.
Aparte de ese requisito (indispensable), me desagrada tanto como cualquiera.
Merece la reputación que tiene. No todos necesitan la estructura rígida que los desarrolladores de Maven consideran adecuada para cada proyecto. Es tan inflexible. Y lo que es ''Pro'' para muchas personas, la gestión de la dependencia, es en mi humilde opinión su mayor ''estafa''. No me siento cómodo con Maven descargando los archivos jar de la red y perdiendo el sueño por las incompatibilidades (sí, el modo fuera de línea existe, pero ¿por qué debería tener todos esos cientos de archivos xml y sumas de comprobación)? Decido qué bibliotecas utilizo y muchos proyectos tienen serias dudas sobre construcciones que dependen de la conexión de red.
Peor aún, cuando las cosas no funcionan, estás absolutamente perdido. La documentación apesta, la comunidad no tiene ni idea.
Mi experiencia práctica a partir de dos grandes proyectos es que hemos dedicado de 1000 a 1500 horas para cada proyecto en problemas relacionados con Maven, excluyendo un esfuerzo de 500 horas de pasar de maven 1 a maven 2.
Desde entonces, debo decir que odio absolutamente a maven. Me estoy frustrando cuando pienso en ello.
La integración de Eclipse es horrible. (Tuvimos problemas interminables con la generación de código, por ejemplo, donde eclipse salió sincronizado con el código generado y requirió una reconstrucción completa, con bastante frecuencia. La culpa es a la vez maven y eclipse, pero eclipse es más útil que maven y dice emacs, por lo que Eclipse se queda y Maven tiene que irse.
Tuvimos muchas dependencias, y como descubrimos, los errores de sintaxis están realmente comprometidos con los repositorios de maven públicos con bastante frecuencia, lo que puede arruinar horas de su valioso tiempo. Cada semana. La solución alternativa es tener un proxy o un repositorio gobernado localmente y eso también llevó bastante tiempo en hacerlo bien.
La estructura del proyecto Mavens no es realmente adecuada para el desarrollo con Eclipse, y el tiempo de construcción en eclipse aumenta.
Como efecto de la generación de código y el problema de sincronización, tuvimos que reconstruir desde scrach con bastante frecuencia, reduciendo su código / compilación / ciclo de prueba a un compilado / websurf / sleep / die / code-cycle interminable, enviándolo de vuelta a los 90 y 40 minutos de compilación.
La única excusa para maven es la resolución de dependencia, pero me gustaría hacerlo de vez en cuando, no en cada compilación.
En resumen, maven está tan lejos de KISS como puede ser. Y también, los defensores tienden a ser el tipo de personas que celebra extra en su cumpleaños cuando su edad es un número primo. Siéntete libre de votar por mí :-)
Mi experiencia refleja la frustración de muchos de los mensajes aquí. El problema con Maven es que envuelve y oculta los detalles de la gestión de compilación en su búsqueda de la máxima bondad automotriz. Esto te hace casi indefenso si se rompe.
Mi experiencia es que cualquier problema con maven se degeneró rápidamente en una búsqueda a cámara lenta de varias horas a través de webs de archivos xml anidados, en una experiencia similar al tratamiento de conducto.
También trabajé en tiendas que dependían en gran medida de Maven, las personas a las que les gustó (a quienes les gustó el aspecto de "pulsar un botón, hacerlo todo") no lo entendieron. Las versiones maven tenían un millón de objetivos automáticos, que estoy seguro serían útiles si quisiera tomarme el tiempo para leer lo que hicieron. Mejores 2 objetivos que funcionan y que entiendes completamente.
advertencia: la última vez que trabajé con Maven hace 2 años, puede que sea mejor ahora.
Miré a Maven hace unos seis meses. Estábamos comenzando un nuevo proyecto y no teníamos ningún legado que apoyar. Eso dijo:
- Maven es todo o nada. O al menos hasta donde pude ver en la documentación. No se puede usar fácilmente maven como un reemplazo directo para hormiga, y adoptar gradualmente características más avanzadas.
- Según la documentación, Maven es la felicidad trascendental que hace realidad todos tus sueños más descabellados. Solo tienes que meditar en el manual durante 10 años antes de iluminarte.
- Maven hace que tu proceso de compilación dependa de tu conexión de red.
- Maven tiene mensajes de error inútiles. Comparar el "objetivo x no existe en el proyecto y" con la ejecución "tarea inválida" de mvn: debe especificar una fase de ciclo de vida válida o un objetivo en el complemento de formato: meta o pluginId de grupo: pluginArtifactId: pluginVersion: objetivo ". sugiere que ejecute mvn con -e para obtener más información, lo que significa que imprimirá el mismo mensaje, luego un seguimiento de pila para una BuildFailureException.
Una gran parte de mi disgusto por maven se puede explicar con el siguiente fragmento de Better Builds with Maven:
Cuando alguien quiere saber qué es Maven, generalmente se preguntan "¿Qué es exactamente Maven?", Y esperan una respuesta breve y con una buena respuesta. "Bueno, es una herramienta de compilación o un marco de guiones" Maven es más que tres palabras aburridas y poco inspiradoras. Es una combinación de ideas, estándares y software, y es imposible destilar la definición de Maven simplemente mordeduras de sonido digeridas. Las ideas revolucionarias a menudo son difíciles de transmitir con palabras.
Mi sugerencia: si no puedes transmitir las ideas con palabras, no debes intentar escribir un libro sobre el tema, porque no absorberé las ideas telepáticamente.
No diría que tiene una mala reputación, ya que tiene un representante mixto. Si su proyecto sigue el paradigma de "convención sobre la configuración" propugnado por Maven, entonces puede aprovecharlo mucho. Si su proyecto no encaja bien con la visión mundial de Maven, entonces puede convertirse en una carga.
Con ese fin, si tienes control sobre el proyecto, entonces Maven puede ser el camino a seguir. Pero si no lo hace y el diseño lo determina alguien que no sea fan de Maven, puede ser más problemático de lo que vale. Los proyectos más felices de Maven son probablemente los que comenzaron como proyectos de Maven.
Para mí, hay tantos profesionales como contras de utilizar maven vs ant para proyectos internos. Para los proyectos de código abierto, sin embargo, creo que Maven ha tenido un gran impacto en hacer que muchos proyectos sean mucho más fáciles de construir. No fue hace mucho tiempo que tardó horas en compilarse el proyecto de OSS Java (basado en ant), teniendo que establecer una tonelada de variables, descargar proyectos dependientes, etc.
Puedes hacer cualquier cosa con Maven que puedas hacer con Ant, pero cuando Ant no fomenta ningún estándar, Maven sugiere encarecidamente que sigas su estructura, o será más trabajo. Es cierto, algunas cosas son difíciles de configurar con Maven que serían fáciles de hacer con Ant, pero el resultado final casi siempre es algo que es más fácil de construir desde la perspectiva de las personas que solo quieren ver un proyecto y avanzar.
Porque Maven es un dispositivo para reducir hombres crecidos a masas de terror absoluto.
Porque las personas insatisfechas se quejan mientras que las personas satisfechas no dicen estar satisfechas. Mi punto es que hay usuarios maven mucho más satisfechos que insatisfechos, pero más tarde hacen más ruido. Este es un patrón común de la vida real en realidad (ISP, operador de telefonía, transportes, etc.).
Pros:
- Gestión de la dependencia Desde hace varios años, mis compañeros de trabajo y yo no estamos descargando y administrando dependencias manualmente. Este es un gran ahorro de tiempo.
- IDE-independencia. Resulta que todos los principales IDEs, Eclipse, IDEA y NetBeans tienen un soporte decente de los proyectos de Maven para que nuestros desarrolladores no estén encerrados en un IDE en particular.
- Línea de comando. Con Maven, admitir configuraciones simultáneas IDE y de línea de comandos es sencillo, lo que es bueno para la integración continua.
Contras:
- Tengo que invertir en aprender Maven. Bueno, tengo que hacerlo. Buenas noticias, no todos en el equipo tienen que aprender.
- Documentación. Solía ser un problema, ahora gracias a Sonatype y su libro ( http://www.sonatype.com/products/maven/documentation/book-defguide ), la situación es mucho mejor.
- Rigidez. A veces es desafiante y frustrante hacer las cosas de la manera que desee. Mi consejo sería no pelear y hacer que Maven haga las cosas que hace mejor, compilaciones sencillas, o cuando hay un mojo estable disponible. En otros casos, abandonamos y hacemos cosas con tareas Ant ( http://maven.apache.org/plugins/maven-antrun-plugin/ ) o programas externos. Mi favorito personal es Groovy Plugun ( http://groovy.codehaus.org/GMaven ).
Competencia:
- Ant: no tiene administración de dependencia. Período.
- Ivy: aún menos maduro que Maven (no es que el último tampoco tenga sus caprichos). Casi el mismo conjunto de características, por lo que no hay una razón convincente para moverse. Hice varios intentos para probarlo; todo fracasado
En pocas palabras: todos nuestros proyectos ya se han realizado con Maven durante varios años.
Si va a apostar su negocio o trabajo en un proyecto de desarrollo, quiere tener el control de las fundaciones, es decir, del sistema de compilación. Con Maven, no tienes el control. Es declarativo y opaco. Los desarrolladores de maven-framework no tienen idea de cómo construir un sistema transparente o intuitivo, y esto está claro a partir de la salida del registro y la documentación.
La administración de la dependencia es muy tentadora, ya que puede que te conceda tiempo en el inicio del proyecto, pero ten cuidado, está fundamentalmente rota y eventualmente te causará muchos dolores de cabeza. Cuando dos dependencias tienen dependencias transitorias incompatibles, usted será bloqueado por un nido de complejidad que romperá la construcción de todo su equipo y bloqueará el desarrollo por días. El proceso de compilación con Maven también es notoriamente inconsistente para diferentes desarrolladores en su equipo debido a estados inconsistentes de sus repositorios locales. Según el momento en que un desarrollador creó su entorno o en qué otros proyectos están trabajando, tendrán diferentes resultados. Descubrirá que está eliminando todo su repositorio local y haciendo que Maven re-descargue frascos con mucha más frecuencia que la primera configuración de una rama de desarrollo. Creo que OSGI es una iniciativa que intenta solucionar este problema fundamental. Diría que quizás, si algo tiene que ser tan complejo, la premisa fundamental es incorrecta.
He sido un usuario / víctima experto desde hace más de 5 años y debo decir que le ahorrará mucho más tiempo simplemente comprobar sus dependencias en su repositorio de origen y escribir tareas sencillas y sencillas. Con hormiga, sabes EXACTAMENTE lo que está haciendo tu sistema de construcción.
Experimenté muchas, muchas semanas perdidas de hombres en varias compañías debido a problemas con Maven.
Hace poco intenté revivir un viejo proyecto de GWT / Maven / Eclipse y, después de 2 semanas de todo mi tiempo libre, todavía no puedo conseguirlo de forma consistente. Es hora de cortar mis pérdidas y desarrollarme usando hormiga / eclipse, piensa ...
gran idea: mala implementación.
Moví un proyecto de Ant a Maven recientemente. Funcionó bien al final, pero tuve que usar dos versiones diferentes de maven-assembly-plugin y maven-jar-plugin en el mismo pom (obtuve dos perfiles) porque lo que funcionaba en una versión se rompió en otra.
Entonces fue un gran dolor de cabeza. La documentación no siempre es excelente, pero debo admitir que fue relativamente fácil de google respuestas.
asegúrese de especificar siempre las versiones de los enchufes que usa. No espere que la nueva versión sea compatible con versiones anteriores.
Creo que la controversia proviene del hecho de que Maven todavía evoluciona y el proceso es doloroso a veces.
Saludos
v.
Un año después quise actualizar esto: ya no tengo esta opinión sobre la comunidad Maven. No escribiría esta respuesta si la pregunta se hiciera hoy. Voy a agregar mi opinión actual como una respuesta separada.
Esta es una respuesta muy subjetiva, pero la pregunta es sobre opiniones, entonces ...
Me gusta Maven, y me gusta más cuanto más lo conozco. Una cosa que afecta mis sentimientos al respecto, sin embargo: la comunidad maven se centra principalmente en Sonatype ("la compañía maven", es donde muchos de los expertos de Maven están trabajando), y Sonatype está impulsando sus productos corporativos de forma bastante agresiva en la comunidad.
Un ejemplo: el flujo de Twitter "Maven Book" se vincula con una supuesta introducción a la gestión de repositorios .
Lo siento, pero esa "introducción" es mitad de información, lanzamiento de mitad de venta para Nexus. Pop Quiz: ¿hay otros gerentes de repo además de Nexus y Nexus Pro? Además, ¿qué tiene eso que ver con el libro Maven Book supuestamente de código abierto? Ah, claro, el capítulo sobre gestión de repositorios se ha dividido en un libro aparte ... sobre Nexus. Huh. Si contribuyo con el libro de Maven, ¿recibo una tarifa de referencia si ocasiono un aumento en las ventas de Nexus?
Imagínese si estuviera participando en un foro de desarrollo de Java y estuviera claro que los empleados de Sun discutiendo sobre Java aprovecharían todas las oportunidades posibles para hablar sobre NetBeans y "NetBeans Pro". Después de un tiempo, pierde parte de su sentimiento comunitario. Nunca tuve una experiencia así con Ant.
Habiendo dicho todo eso, creo que Maven es un sistema muy interesante y útil (no lo llamo una herramienta, como Ant es, Maven es más amplio que eso) para la configuración de desarrollo de software y la administración de compilación. La administración de la dependencia es una bendición y una maldición a veces, pero es refrescante, y ciertamente no es la única ventaja que ofrece Maven. Probablemente estoy reaccionando demasiado fuerte al chelín Sonatype, pero a Maven le duele por asociación, en mi opinión. No sé si esta opinión es compartida por alguien más.
- Te impone una estructura rígida desde el principio.
- Está basado en XML, por lo que es tan difícil de leer como ANT.
- Su informe de errores es oscuro y te deja varado cuando las cosas van mal.
- La documentación es pobre.
- Hace las cosas difíciles fáciles, y las cosas simples son difíciles.
- Se necesita demasiado tiempo para mantener un entorno de construcción Maven, que derrota el punto de tener un sistema de compilación que canta todo.
- Se necesita mucho tiempo para descubrir que ha encontrado un error en maven y no ha configurado algo incorrecto. Y los insectos existen, y en lugares sorprendentes.
- Promete mucho pero te traiciona como un amante hermoso y seductor, pero emocionalmente frío y manipulador.