maven 2 - groupid - ¿Construir, Gradle o esperar a Maven 3?
maven group id artefact (9)
Ant with Ivy tiene la misma administración de dependencias que Maven (de hecho, utiliza toda la infraestructura de administración de dependencias de Maven, incluidos los mismos repositorios de URL), pero sin todo el desorden de configuración de POM.
Ant with Ivy podría ser una forma de manejar los problemas de dependencia para las personas que realmente no quieren usar Maven. Resuelve el 90% de las cosas que se suponía que Maven debía resolver.
Estoy realmente cansado de luchar con Maven 2 todo el tiempo. Las herramientas de compilación no deberían estar en el camino. Recientemente he estado buscando en Buildr y Gradle. Maven 3 parece arreglar algunas de las luchas. Entonces, ¿a qué debo ir ahora? Buildr? Gradle? O espera un año para Maven 3?
Creo que las personas que se quejan de Maven deberían dedicar un poco más de tiempo a investigar los complementos disponibles. En respuesta a los comentarios quejándose de que Maven es rígido y hace que sea difícil usar una lógica de compilación personalizada / proporcionar un control detallado sobre el proceso de compilación, recomendaría buscar el complemento Ant para Maven (en realidad hay varios, pero aquí hay uno : http://maven.apache.org/plugins/maven-antrun-plugin ). He tenido un gran éxito personalizando las compilaciones de Maven a lo largo de los años. Básicamente, le permite ejecutar cualquier comando Ant como parte de la compilación de Maven, y puede hacer casi cualquier cosa con Ant;)
Mantenga su código bien mantenido y dividido en módulos bien definidos y la migración entre los sistemas de compilación se convierte en un problema menor.
Por el momento, maven-2 es una buena opción para la mitad 2/3 de los proyectos. Para lo realmente simple, la hormiga todavía está bien. Para lo realmente complejo, un híbrido de maven-2 y otras herramientas (como antrun) se vuelve inevitable.
No estoy seguro de por qué estás teniendo problemas con maven-2.
Difiere de hormiga y constructor en que es una herramienta para describir su proceso de construcción, no para crear un script. Las construcciones complejas, aquellas con múltiples partes dinámicas y dependencias anidadas y / o transitorias son difíciles de construir porque son difíciles de describir.
Maven 2 y 3 han estado trabajando perfectamente para mí en una variedad de proyectos. Actualmente estoy usando Maven 3 alpha 7 que funciona muy bien, especialmente en conjunción con el plugin Eclipse Maven.
Maven se integra a la perfección con Ant - en ambas direcciones. En mi proyecto actual, invocamos a Maven de Ant varias veces para realizar una prueba de integración compleja. Del mismo modo, utilizamos Ant a través del plugin AntRun de Maven, y también escribimos nuestros propios plugins Maven. Esto, por cierto, es cuestión de minutos y se reduce a escribir un Pojo anotado.
Maven recibe muchos errores porque a muchos desarrolladores no les gustan las reglas o las convenciones. Simplemente, nadie te obliga a usar Maven. Si desea la máxima libertad, de cualquier modo, vuelva a escribir su propio proceso de compilación para cada proyecto al que se una. Sin embargo, si desea crear software en lugar de reinventar la rueda con un proceso de construcción personalizado en cada proyecto, vaya a Maven.
Ningún sistema de compilación es una bala mágica. Creo que Maven resuelve más problemas de los que me causa, pero me siento bastante cómodo escribiendo complementos para sortear sus fallas, también me ocupo de cientos de proyectos, por lo que la herencia de Maven y el procesamiento de dependencias son bastante útiles para mí.
Navega SO un poco y verás que Buildr y Gradle también tienen problemas (lo mismo para Ant e Ivy), generalmente estás cambiando un conjunto de problemas por otro y es el caso de encontrar el menos doloroso.
¿Hay algo en particular que te moleste acerca de Maven o es una picazón general? Si se trata de un problema en particular, vale la pena mirar los problemas de Maven 3 en Jira , si no se aborda el problema, puede plantearlo, o puede que tenga poco sentido esperar.
No esperaría demasiado de Maven 3. Las personas detrás del pedigrí de herramientas de construcción Maven siempre han asumido que las construcciones de proyectos son homogéneas, es decir: todos los problemas de construcción se reducen fundamentalmente al mismo problema. Esta visión del mundo puede mantenerse de forma bastante consistente frente a puntos de vista opuestos, pero tiene un costo. La ausencia de lógica de scripts en Maven ("cuando quieres guiar sabes que estás haciendo algo mal"), la engorrosa API de complementos ("ningún usuario ordinario de Maven debería querer escribir un plugin") y el repositorio central ("nosotros todos tienen las mismas dependencias ") son todos testamentos de esta suposición general.
En el mundo real, los problemas de compilación son heterogéneos porque las personas crean software por una amplia variedad de razones. Todos ellos se "desarrollan" como si todos ''perforamos agujeros'' de vez en cuando para resolver problemas únicos. Independientemente de su nivel de abstracción, siempre encontrará similitudes al comparar problemas de compilación arbitrarios. La revelación de estas similitudes y la condena de las diferencias es la caída del diseño de Maven y la razón por la que atrae tanto flak. Básicamente, Maven es autoritario y utópico en su perspectiva.
PD: Maven tiene buenas características, como la convención sobre configuración y la idea de usar repositorios (la implementación de Maven de esta idea es problemática).
Prueba Lattice https://github.com/hackingspirit/Lattice . Yo soy el autor Aquí está la primicia:
En Lattice, los archivos de compilación no se escriben en XML, sino en Python. Los beneficios son mucho más legibles y poderosos scripts de compilación imperativos soportados por Python. Para proyectos de múltiples módulos. Lattice utiliza la clasificación topológica para decidir el orden correcto para construir cada módulo. También está previsto que Lattice analice la dependencia del módulo para determinar cómo se puede paralelizar la compilación del módulo. El código fuente de Lattice es extremadamente delgado, actualmente consta de aproximadamente 500 líneas de código fuente de Python.
Usamos Maven aquí, pero me parece que una vez que se sale de un proyecto simple, el pom.xml comienza a volverse más y más complejo. Empiezas a pasar mucho tiempo averiguando cómo demonios configurar tu pom para hacer lo que quieras y cómo solucionar los diversos problemas.
Lo que realmente me atrapó fue el oído que estamos construyendo. Tenemos múltiples guerras en ese archivo de orejas, y Maven normalmente pega las bibliotecas en las guerras. Sin embargo, para reducir el tamaño de las guerras, y para mantener los frascos iguales, queríamos poner las jarras compartidas entre las guerras en el directorio lib de la oreja.
Desafortunadamente, Maven no maneja esto muy bien. Necesitábamos configurarlo manualmente para cada uno de los poms de las guerras, y luego agregar todas estas dependencias al pom del oído.
En otro proyecto, tenemos archivos de ayuda basados en HTML. Las personas que escriben la ayuda las escriben en Microsoft Word y luego usan un programa para traducirlas a HTML. Un único cambio de carácter puede repercutir en cientos de archivos.
Para evitar este problema, nuestro sistema de ayuda se almacena en nuestro repositorio de origen como un único archivo comprimido. Cuando nuestro equipo de documentación crea un nuevo conjunto de archivos de ayuda, lo comprimen y reemplazan lo que está en el repositorio.
Entonces, parte de mi compilación es descomprimir este archivo y colocarlo en la guerra. Fácil de hacer en Ant, no puede hacerlo en Maven a menos que use el plugin Antrun que le permite escribir código Ant para manejar problemas que Maven no puede manejar sin un plugin completo.
Puedo ver lo que está haciendo Maven, pero la teoría se adelantó a la realidad. Lo que encontré es que Ivy y Ant pueden hacer la mayoría de las comprobaciones de dependencia que hace Maven sin todos los problemas de escribir y mantener los poms.
Si aún no estás usando Maven, prueba Ant con Ivy primero. Luego, cuando salga Maven 3, intenta eso. Recuerdo la transición de Maven 1 a Maven 2. Eran totalmente incompatibles entre sí y todo lo que aprendiste con Maven 1 era obsoleto. Sería una tontería aprender y rehacer sus proyectos en Maven 2 para que de repente se encuentre rehaciendo todo para Maven 3.
maven 3.x ya está integrado en los IDE (al menos en netbeans, consulte este enlace para obtener más información). Puedes jugar hoy con maven 3.x simplemente construyendo un proyecto Maven con netbeans.
Otra buena noticia es que maven obtuvo un mayor apoyo ''empresarial'' con la integración de EJB / WS en proyectos IDE (nuevamente, al menos en netbeans).
Así que me quedaría con maven 2.x para compilaciones de producción y jugaré con maven 3.x para el desarrollo.