Me gustaría contrarrestar algunas de las quejas presentadas en este foro:
Maven es todo o nada. O al menos por lo que pude ver en la documentación. No puede usar maven fácilmente como un reemplazo directo de ant y adoptar gradualmente funciones más avanzadas.
Eso no es cierto. La gran ventaja de Maven es usarlo para administrar tus dependencias de una manera racional y si quieres hacerlo en Maven y hacer todo lo demás en Ant, puedes 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 poner el tarro de tareas de hormiga maven en el directorio lib de su hormiga.
Maven hace que su proceso de construcción dependa de su conexión de red.
La dependencia predeterminada y el proceso de obtención de complementos depende de una conexión de red, sí, pero solo para la compilación inicial (o si cambia las dependencias o complementos en uso). Después de eso, todos los frascos se almacenan en caché localmente. Y si desea forzar la 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 de "convención versus configuración". Para este último, hay muchos valores predeterminados invisibles como la ubicación esperada de los archivos y recursos fuente de Java, o la compatibilidad de la fuente. Pero esto no es rigidez, es poner valores predeterminados razonables para que no tenga que definirlos explícitamente. Todas las configuraciones 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á hablando del formato de archivo, bueno, eso se cubre en la respuesta a la siguiente parte ...
Está basado en XML, por lo que es tan difícil de leer como lo fue ANT.
En primer lugar, no veo cómo puede quejarse de que algún aspecto de algo "no es mejor que una hormiga" como justificación para que tenga una mala reputación. En segundo lugar, aunque sigue siendo XML, el formato del XML es mucho más definido. Además, debido a que está tan definido, es mucho más fácil hacer un editor de cliente grueso y sensato para un POM. He visto páginas largas de guiones de construcción de hormigas que saltan por todos lados. Cualquier editor de secuencias de comandos de construcción de hormigas no lo hará 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 alguna validez, la más grande es
- La documentación es deficiente / falta
- Construcciones reproducibles
- La integración de Eclipse es mala
- Loco
A lo que 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 llegar al nivel de madurez de esas aplicaciones. En segundo lugar, bueno, si no te gusta, arréglalo . Es un proyecto de código abierto y usarlo y luego quejarse de algo que cualquiera puede ayudar a resolver me parece bastante estúpido. ¿No te gusta la documentación? Contribuya a 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 versiones y actualizaciones automáticas de complementos de maven. Para las actualizaciones del complemento, bueno, a menos que se esté asegurando cuando reconstruya un proyecto un año después de que está usando exactamente el mismo JDK y exactamente la misma versión de Ant, bueno, 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 transitivas y que lo haga parte del ciclo de vida de la versión de maven. De esa manera, los poms de compilación de su lanzamiento son siempre descripciones exactas de todas las dependencias.