Piensa en un mundo en el cual estás solo, tú no estás
dependiendo de nadie, no necesitas nada más que a ti mismo. Tú puedes realizar
tus tareas y sobrevivir sólo por tu propia cuenta. Si te gusta eso, entonces
puedes hacer pocas cosas en tu vida.
Un proyecto Java no
está solitario
Construir un proyecto Java puede parecer simple, se
necesita compilar las clases java y obtener la funcionalidad en un .jar. No obstante, en otros casos, un
proyecto Java es más grande, el cual está usando una gran cantidad de proyectos
diferentes de los que depende, es algo más difícil de manejar porque esos
proyectos tienen sus propias versiones. Si hay muchos proyectos trabajando
juntos, cada uno con sus versiones y cadena de dependencias, entonces es
necesario automatizar eso. El tiempo no puede ser desperdiciado en tareas
repetitivas, la preocupación está en escribir código. Y se necesita buen
código.
¿Los proyectos Java
unidos son más fuertes?
Alguien puede decir "Para administrar mi proyecto
sin depender de nadie, colocaré todas las clases Java en un único
proyecto". Alguien puede hacer esto, y puede hacer lo que quiera, pero
violará todas las buenas prácticas y recomendaciones de diseño. Se tendrá un
complicado proyecto que nadie será capaz de mantener porque este único proyecto
no se encuentra separado en componentes con diferentes propósitos.
Cuando un proyecto más listo es construido usando un
poco de sentido común, este proyecto tendrá un propósito y este tiene una
responsabilidad. En este caso, hay varios proyectos que trabajan juntos, cada
uno sabe los proyectos que necesita para hacer su trabajo. Ellos no están
trabajando solos y cuando se necesita arreglar algo o adherir una nueva funcionalidad,
entonces será más fácil saber dónde empezar a codificar. Tu diseño tiene
sentido ahora.
Controlando la vida de
un projecto
Maven puede ayudar cuando hay un proyecto java y tareas
repetitivas como el manejo de versiones y su manejo de dependencias, los cuales
pueden convertirse en un dolor de cabeza. Los nombres de los proyectos y la
versión solamente es especificada una vez, sólo una vez, y el equipo puede
preocuparse de codificar u otras actividades más importantes. Así mismo, el
proyecto codificado también tiene una versión, entonces puede ser referenciado
por otros.
Maven trabaja con repositorios, los cuales contienen los
proyectos .jar necesitados y descargados. También pueden
existir otros repositorios donde el jar es deployado, los
desarrolladores no están trabajando solos, y cada uno tiene que trabajar con la
última versión de todos.
Maven usa comandos simples para construir todo un
proyecto, esos son repetitivos y siguen algunos estándares como
estructura de las carpetas donde está el código, los test, recursos, etc., los
problemas para manejar los proyectos son reducidos.
El código Java es usado para obtener la funcionalidad y
el pom xml es usado para manejar el proyecto, ese archivo es
lo que entiendo Maven, ese es el proyecto en sí mismo.
Y es más que eso
Maven usa plugins con
diferentes intenciones. Ellos pueden ser usados para correr test, deployar un
proyecto en un servidor, generar reportes, etc., hay muchos de éstos y son
añadidos más. Incluso es posible hacer tu propio plugin.
Los archetypes permiten construir un
proyecto war, ear, o un jar, entre muchos otros, añadiendo Spring, JSF y muchas
tecnologías más, solamente usando un comando sencillo. Empezar a codificar en
un proyecto rápidamente, viendo sus resultados, es más fácil. En el caso que no
se necesita seguir la misma estructura del archetype,
es permitido hacer modificaciones en la estructura del proyecto porque el pom
generado puede cambiar.
Como los proyectos,
Maven no está trabajando sólo
Existe una comunidad de código abierto que se encuentra
integrando Maven con otras tecnologías como Hudson
que necesita construir un proyecto y correr sus test automatizados. También
usar plugins para deployar
automáticamente un proyecto en un servidor y tiene mucho más por ofrecer.
Maven también tiene algunas desventajas, aquí hay
algunas de ellas:
- El archivo
pom puede ser muy grande. Si el proyecto usa muchas dependencias y
plugins, entonces no hay forma de separar las partes. El archivo es más
difícil de entender a medida que crece.
- Dos
dependencias de un proyecto pueden necesitar la misma dependencia, pero
con diferentes versiones. Las dependencias transitivas son más difíciles
de manejar.
- Una
dependencia que no compila puede necesitar otras dependencias
(dependencias transitivas) y es necesario actualizar esta última y
compilarla en el caso que se encuentre en construcción también.
- El ciclo de
construcción de un proyecto puede ser lento, aunque sus pasos son
necesarios. Éste necesita descargar todas las dependencias, compilar,
correr los tests, instalar y deployar. Se puede especificar si se quiere
ignorar algún paso.
Maven administra la vida de un proyecto. Tiene algunas
deficiencias, pero hace su trabajo y lo hace bien.