¿Cuáles son los aspectos más destacados de las principales diferencias entre las dos herramientas?
Estructura del proyecto
Maven prefiere una estructura de proyecto específica: uno debe comprometerse a hacer las cosas a la manera de Maven. Maven viene con pasos de compilación comunes ya configurados en una raíz pom.xml
que normalmente es heredada por todos los demás proyectos pom.xml
.
Ant + Ivy es más abierto: si bien puede hacer mucho, solo hay unos pocos requisitos básicos en términos de estructura del proyecto o uso de script. No hay tareas, objetivos o procesos de compilación predeterminados. Cada uno build.xml
es una pizarra limpia (a menos que incluya otro script, por supuesto).
Orientación
Maven está orientado a objetivos . No dices "ejecutar este objetivo de compilación", le pides que "compile" o "despliegue" y Maven hace lo que sea necesario para llegar allí: dices lo que quieres hacer.
Ant + Ivy está orientado a tareas . Cada tarea está definida por la implementación y personalizada. Le dices cómo hacer lo que quieres.
Gestión de dependencias
Maven es mejor conocido por manejar automáticamente dependencias. Descargará las versiones correctas mientras compila sin ninguna interacción del usuario, siempre que las URL del repositorio estén configuradas correctamente con anticipación.
Ant no tiene gestión de dependencias excepto "Java Classpath". Ivy agrega una gestión de dependencias que es un poco más tediosa que Maven pero que aún está automatizada. La clave aquí es que no puede elegir la administración de dependencias (por ejemplo, "frascos incluidos en mi distribución o registrados en el control de origen") o puede subcontratarlos a través de Ivy. Esa elección significa más flexibilidad para satisfacer las necesidades del proyecto.
Facilidad de uso
Maven es (en teoría) fácil de usar. Cualquier desarrollador puede elegir un proyecto de Maven e inmediatamente saber dónde se encuentran todos los recursos del proyecto y para qué sirven: esto se debe al primer punto sobre que Maven tiene una forma específica de hacer las cosas.
Ant + Ivy puede tener una curva de aprendizaje más pronunciada porque cada proyecto puede ser diferente. Los diferentes proyectos pueden tener diferentes formas de lograr los mismos objetivos.
Extensibilidad
Maven permite escribir complementos y alterar su proceso de construcción. Sin embargo, sale de la caja con una raíz pom.xml
que empuja a los desarrolladores hacia sus procesos de compilación predeterminados. Los nuevos objetivos o pasos de construcción requieren una cuidadosa reflexión y un esfuerzo adicional para inyectarse en el proceso de construcción.
Ant + Ivy también permite escribir complementos y nuevas tareas: hacerlo es bastante fácil y uno puede integrar una nueva tarea con un mínimo esfuerzo. No hay objetivos u objetivos predeterminados para barajar o integrar la nueva tarea.
¿Cómo sucedió que Apache evolucionó para crear dos conjuntos de herramientas completamente separados que en última instancia son tan similares en propósito?
Lo primero que hay que entender es que el proyecto Apache no es más que un paraguas bajo el cual operan proyectos separados e independientes. Diferentes equipos trabajan en diferentes proyectos. Si bien los desarrolladores individuales pueden trabajar en múltiples proyectos, no existe una hoja de ruta general que incorpore Ant, Ivy y Maven.
La hormiga vino primero. Fue diseñado para ser un equivalente Java de Make. Si bien Make puede construir proyectos Java, es tedioso: Make existió para compilar un grupo de unidades de compilación por separado y luego vincularlas. La forma Java es javac
compilar todo de una vez, y lo que llamamos "vinculación" realmente ocurre en las entrañas de la JVM en tiempo de ejecución. Make no era la herramienta adecuada para el trabajo: un Makefile para Java es básicamente uno o dos objetivos ( javac
, jar
).
Ant agregó un poco de estructura sobre Make, pero no alteró fundamentalmente el proceso.
Después de un tiempo, la comunidad se dio cuenta de que cazar archivos jar no era divertido. Además, no había una forma estándar de componer proyectos. Sin coherencia, el desarrollo de Java fue un desastre. Maven fue diseñado para resolver estos problemas: traería una estructura de proyecto común y automatizaría la búsqueda de archivos jar.
Sin embargo, Ant seguía siendo realmente útil. Algunos proyectos simplemente se prestan más a la naturaleza ad-hoc de los procesos de Ant. Algunos proyectos no están compilando código. Algunos proyectos eran antiguos y era poco probable que alguien los "actualizara" a Maven.
Luego viene Ivy: agrega gestión de dependencia a Ant, dando a los proyectos lo mejor de ambos mundos. Puede conservar sus scripts heredados o su entorno altamente personalizado, pero obtener la característica más importante de Maven: la gestión de dependencias.