sábado, 2 de diciembre de 2017

Guia Rapida de Maven

Esta es una guía de iniciación para Maven, aprenderemos lo escencial de Maven para empezar a usarlo cuando antes, si necesitas saber que es Maven te invito a leer la entrada ¿Que es Maven?, está guía no pretende profundizar en todas las funcionalidades de Maven, solo veremos lo escencial.

1. El ciclo de vida de construccion en Maven
Maven usa el concepto build lifecycle, este concepto indica que el proceso de construcción y distribución de un artefacto(proyecto) está claramente definido.
Para la persona que necesita construir un proyecto, esto significa que solo se requiere aprender unos cuantos comandos para construir cualquier proyecto Maven. Maven define una serie de convenciones y reglas. Desde la estructura de un proyecto hasta los pasos de construcción. Maven las define para que podamos construir nuestro proyecto con el minimo de configuraciones y de forma facil.

Maven viene integrado con tres lifecycles: default, clean y site. El lifecycle default maneja el despliegue de tu proyecto, el lifecycle clean maneja limpiezas del proyecto mientras que el lifecycle site maneja la creación de los sitios de documentación de tu proyecto.
Cada uno de estos lifecycle está compuesto por una lista de build phases, un buid phase se define como una etapa en el lifecycle.
Por mencionar los más importantes, el lifecycle default comprende las siguientes build phases:
  • validate - Valida que el proyecto esta correcto y toda la información requerida está disponible
  • compile - Compila el codigo fuente del proyecto.
  • test - Prueba el codigo fuente compilado usando un framework de testing unitario.
  • package - Toma el código fuente compilado y lo empaqueta dentro de un formato distribuible, tal com JAR o WAR.
  • verify - Ejecuta algunas verificaciones sobre los resultados de pruebas de integración para asegurar que pasen los criterios de calidad.
  • install - Instala el package (jar) en el repositorio local, para que sea usado como dependencia en otros proyectos localmente.
  • deploy - Se realiza en el ambiente de producción, copia el package final al repositorio remoto para ser compartido con otros desarrolladores y proyectos.

Estas phases son ejecutadas secuencialmente y en el orden mencionado.
En un ambiente de desarrollo, si queremos instalar nuestro artefacto en el repositorio local ejecutaremos el siguiente comando:

mvn install

Este comando ejecuta cada una de las phases del lifecycle default en el orden (validate, compile, test, package, etc,.), hasta ejecutar la phase install. Es decir, solo necesitas llamar a la ultima phase que necesitas.

2.- Repositorios Maven
Un repositorio es el lugar donde los artefactos (jar, war, ear) construidos son almacenados. Hay dos tipos de repositorios, local y remoto. Los repositorios locales están en el directorio del usuario del sistema, más especifico, en Windows la ruta por defecto es "C:\Users\{usuario}\.m2\repository". En este directorio se almacena una copia de todos los archivos que son usados en nuestro proyecto como dependencias. El repositorio remoto se encuentra en un servidor remoto conectado a la red Internet, este es gestionado por un tercero. El repositorio remoto mas conocido es el del propio maven. La URL del repositorio central de Maven se encuenta en http://www.mvnrepository.com, pos si quieres curiosear un rato.

3.- El archivo pom.xml de Maven
Este archivo es el equivalente al archivo build.xml de ANT. El archivo pom.xml de Maven contiene las configuraciones para construir y gestionar un proyecto. Basicamente aquí se definen las propiedades del proyecto, las dependencias del proyecto(librerias jars de terceros o propios) y los plugins de maven a ejecutar.

Un pom debe tener al menos la siguiente información
  • modelVersion
  • groupId
  • artifactId
  • version
Aquí un ejemplo sencillo de un archivo pom.xml



Generalmente no vas a crear este archivo desde cero, para eso maven te proporciona artefactos (plantillas), tu trabajo se enfocará en agregar las dependencias que necesites.

4.- Dependencias Maven
Dependencias son aquellas liberias (jars) externas que nuestro proyecto requiere, por ejemplo el famoso Log4J, libreria para escribir registros. Toda dependencia que nuestro proyecto requiera debe ser declarado en nuestro POM (pom.xml). Maven buscará estas dependencias en nuestro repositorio local, si no los encuentra entonces los descargará desde el repositorio remoto y los guardará en el repositorio local. Para agregar una dependencia tenemos un elemento disponible, el elemento dependency. Aquí un ejemplo las dependencias que tengo en mi proyecto.


Generalmente para agregar una dependencia lo primero será asegurarnos que se encuentra en el repositorio central de Maven, definirlo en el POM incluyendo el groupId, artifactId, version, type y scope. Lo que yo hago es buscar el artifactId en el repositorio centrar de Maven, copiar la porcion del xml y pegarlo en mi POM.
Por ejemplo para log4j


Los elementos groupId, artifactId y version, se entienden por si solos, te explico los otros dos elementos.
  • type: El tipo de empaquetado que usa la dependencia, generalmente esto lo sabes por el tipo de extensión de la dependencia; jar, war o ear. No siempre el tipo corresponde a la extensión, pero si en su mayoria.
  • scope: Este elemento se refiere al contexto del uso de la dependencia en relación con el classpath, es decir, se desea usar la dependencia en compilacion, en tiempo de ejecución o en testing. Hay cinco tipos de scope disponibles, pero las mas usadas son:
    • compile: Es el scope usado por defecto, en caso de que no se especifique alguno.Dependencias con scope compile son agregados al classpath, es más, estás dependencias son propagadas a proyectos dependientes.
    • runtime: Dependencias con scope runtime no son requeridas para la compilación, pero si para la ejecución.
    • test: Dependencias con scope test no son requeridas para uso normal de la aplicacion, sólo están disponibles para la fase de pruebas y ejecución.
5.- Plugins en Maven
Todo proceso en Maven es realizado por plugins. Un plugin es mapeado y ejecutado como una phase. Una phase es mapeada a multiple objetivos. Estos objetivos son ejecutados por el plugin. Nosotros podemos invocar explicitamente un objetivo cuando ejecutamos Maven.
Un plugin muy usado es el plugin 'compiler', este plugin es el encargado de compilar el codigo fuente Java. El plugin compiler tiene dos objetivos, compiler:compiler y compiler:testCompile.
Usando el elemento configuration, podemos pasar parametros al plugin. Aquí podemos ver una poción de mi pom.xml que usa plugins.


Para proyectos básicos no necesitas agregar explicitamente los plugins, mas adelante veremos los arquetipos, ellos se encargan de agregar los plugins necesarios.

6.- Estructura de un proyecto en Maven
Maven tiene bien definido una convención para la estructura de directorios de un proyecto. Si seguimos está convención no necesitaremos configuraciones adicionales para definir donde están localizados los elementos. Maven conoce donde se encruenta el código fuente, casos de pruebas, recursos, etc,. Para conocer un poco más veamos la estructura de un proyecto web.

Las carpetas más importantes son: src, resources, webapp, test, target.
De nuevo, para proyectos básicos no necesitas crear explicitamente el directorio, Maven o hace por tí

7.- Archetype en Maven
En Maven tenemos los 'Archetype' o arquetipos, los arquetipos son como plantillas para crear proyectos. Maven proporciona estas plantillas para iniciar un proyecto, usando arquetipos podemos iniciar rapidamente un proyecto Maven. Los arquetipos definen la estructura de directorios de nuestro proyecto, definen los plugins a usar, definen las dependencias. Más especifico, ademas de definir la estructura de directorios también definen un pom.xml.

8.- Creando nuestro primer projecto en Maven
Ahora si, vamos a crear nuestro primer proyecto Maven, asumiendo que tienes Maven instalado correctamente. 
Lo primero que haremos será abrir una ventana de comandos, navegar hasta el directorio donde queremos crear el proyecto, luego ejecutar el siguiente comando:

mvn archetype:generate -DgroupId=com.macrob.sample -DartifactId=first-mavenapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
 
Donde
  • -DgroupId: Es la combinacion de la organización y producto.
  • -DartifactId: El nombre del artefacto, o el nombre del jar. Este nombre es también usado para nombrar el directorio raiz del proyecto.
  • -DarchetypeArtifactId: El arquetipo a usar

 

Lo que hemos hecho es crear un proyecto vacío, un proyecto con una estructura de directorios definido, en donde podemos ir agregando clases, recursos, etc,. Ademas de la estructura de directorios, también tenemos un archivo pom.xml dentro del directorio raiz del proyecto creado,en el pom.xml podemos ir agregando dependencias. Este es un proyecto estandard, si necesitas un proyecto para una aplicación web, necesitas ejecutar un arquetipo para un proyecto web.
Para finalizar, vamos a crear el jar de nuestro proyecto, si lo unico que quiero es generar el jar, vamos a ejecutar el build phase package  

mvn package

 


Si entras al directorio target vas a ver un jar con el nombre first-mavenapp-1.0-SNAPSHOT.jar
Si necesitas instalar este artefacto en tu repositorio local, solo tienes que ejecutar el build phase install
mvn install

Referencia

miércoles, 8 de noviembre de 2017

Quieres Tener un Perro?

Ya sea que adoptes o compres, antes que actues lee esta entrada para darte una idea con lo que tendrás que lidiar.

1. El espacio
Lo ideal es tener una casa con un patio amplio, si vives en departamento y además lo compartes debes considerar la opinión de los otros. Algunos perros tienen la costumbre de comer los muebles de madera, debes lidiar con eso, también algunos perros tienden a tener olor muy seguido, considera que continuamente debes hacer limpieza y bañar al perro.

2. El tiempo
Los perros demandan tiempo, les encanta salir a jugar, a correr. Debes dedicarle al menos 3 horas al día. Considera tu horario laboral. tu proyección profesional, estás por tomar algunos cursos?, considera el horario. Vas a viajar por trabajo?, también tenlo presente. Es ideal que tengas amigos con quien dejarlo cuando quieres escaparte un fin de semana a la playa. Si eres muy fiestero o parrandero, con un perro debes limitarte, porque te espera en tu casa/departamento, al día siguiente en la mañana hay que darle de comer y llevarlo a pasear.

3. Tu presupuesto
Tu amigo no sólo necesitará que lo alimentes, también se te va a enfermar de vez en cuando y necesitarás llevarlo al veterinario y comprarle medicinas. Considera también comprarle juguetes y llevarlo a la peluquería

4. El pelo
Hay perros y épocas en los que ellos botan mucho pelo, debes acostumbrarte a lidiar con ellos, en el suelo, en la ropa, en su cama y todo por donde camine. La solución es llevarlo seguido a la peluquería y limpiar tu casa o departamento muy seguido.

5. La limpieza
Con un inquilino perruno, debes incrementar las frecuencias de limpieza, al salir a la plaza/parque a caminar regresas con los zapatos llenos de tierra, si el perro está botando pelos, deberás limpiar tu casa/departamento más seguido.

6. Los cuidados

7. Tu ubicación
Es ideal que vivas cerca de un parque/plaza así tendrás donde llevarlo a correr, ellos adoran las plantas, los arboles, adoran olfatear

Por último recordarte que un perro es como un hijo, ni más ni menos.

Hola A todos