lunes, 20 de abril de 2015

Maven entra en Juego



Hoy quiero hacer una pequeña introducción sobre Maven.

Aunque no es fundamental para un desarrollador de Java, sí que es un primer paso que nos facilitará la vida en cualquier proyecto que vaya creciendo.

Si quieres empezar a utilizar un nuevo framework o librería lo más normal del mundo es descargarte los ficheros necesarios, copiarlos a tu carpeta de librerías, incluirlas en tu proyecto y a codificar.

Esto que a priori, parece algo sencillo, se puede empezar a complicar: la librería A, puede requerir la libreria B, y ésta a su vez la C, pero B requiere también D, y esta última no se lleva bien con la última versión de C...

Y aquí llega Maven para ayudarnos.

¿Qué es Maven? 

Es una herramienta para gestionar y construir proyectos. Entre otras funcionalidades nos ayuda a gestionar dependencias, y eso es lo que vamos a ver en este artículo.

¿Cómo funciona?

Maven introduce el concepto de Artefacto: es una librería y todo lo necesario para que ésta funcione bien (dependencias, configuración,...)

Cuando en un proyecto se utiliza Maven, existe el fichero "pom.xml", aquí se introduce la lista de todas las librerías (dependencias).

Todas se descargan en un repositorio común de nuestro disco duro sin que tengamos que preocuparnos por ellas.

¿Cómo uso Maven? 

Ahora mismo esta herramienta ya está integrada en la mayoría de IDEs de desarrollo ("Eclipse" entre otros).

¿Un ejemplo?

En todo proyecto siempre solemos necesitar escribir logs, para eso normalmente yo utilizo la librería "log4j". 

La manera tradicional para usar esta librería sería ir a su web: http://logging.apache.org/log4j/1.2  para desacargarla. Pero con Maven lo que tenemos que hacer es buscar sus datos en el repositorio central de Maven.

Para esto vamos a buscarla en esta web: http://mvnrepository.com, buscamos log4j y después de un par clicks llegamos a esta URI: http://mvnrepository.com/artifact/log4j/log4j/1.2.17. En la pestaña de abajo podemos ver el formato de Maven para utilizar esta dependencia:

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

El proyecto "MavenLogExample" esta cargado en Eclipse, inicialmente está configurado sin Maven y tiene la librería dentro del proyecto.

Tiene una clase y en su método Main sólo hay estas líneas:

try {                          
    PropertyConfigurator.configure("log4j.properties");
    log.info("Sistema de log iniciado");                        

} catch (Exception e) {
    e.printStackTrace();  
}

Dentro del proyecto esta la carpeta "lib" que contiene el .jar de "log4j".

Vamos a empezar a usar Maven en este proyecto y a quitarnos la librería del proyecto (con esto ahorramos mucho espacio, imaginaros un proyecto con cien librerías).

Primer paso: darle al proyecto naturaleza Maven

Seleccionamos el proyecto, botón derecho del ratón, pulsamos "Configure" y "Convert to Maven Project".




Nos aparece esta pantalla:



Podemos rellenar los datos "name" y "description" o pulsar "Finish".

Tardará unos segundos en generarnos el fichero "pom.xml". Y aparecerá en la pantalla así:


Si queremos ver cómo es el fichero, podemos pinchar en la última pestaña inferior: "pom.xml"

Veremos que contiene algo parecido a esto:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>MavenLogExample</groupId>
  <artifactId>MavenLogExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>


Segundo Paso: configuración de nuestra librería

Nosotros vamos a añadir la dependencia de "log4j" dentro de <dependencies/> que se escribe después de </build> . Nos quedará así:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenLogExample</groupId>
<artifactId>MavenLogExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>

Ahora ya podemos borrar la librería del proyecto y eliminar su dependencia de la configuración.


Si volvéis a ejecutar veréis que todo funciona perfectamente.

Tenéis este proyecto en nuestro repositorio público: https://bitbucket.org/tecnificados/public

Hay dos commits: el inicial sin Maven y el segundo con Maven y sin la librería de log dentro del proyecto.

Espero que os sea útil.

domingo, 5 de abril de 2015

Documentación y recursos de Microsoft


En este post la intención es comentar y enumerar los recursos y documentación disponibles en Internet sobre las tecnologías Microsoft.

En las primeras versiones de Visual Studio se incluían varios CD's de documentación para ser instalada en el ordenador. Esta documentación, llamada MSDN (Microsoft Developer Network) junto con Internet eran la forma de encontrar las soluciones a los problemas que encontrábamos en el trabajo diario con las primeras versiones del framework .Net.

Sin embargo poco a poco fueron apareciendo, impulsados por la propia Microsoft, más recursos disponibles on-line, y en la actualidad hay todo un ecosistema de documentación, cursos, tutoriales, blogs, etc., que sumados a los recursos "habituales" que todo profesional del software suele utilizar (como StackOverflow, por ejemplo), facilitan enormemente el trabajo diario con las herramientas software de Microsoft.

A continuación veremos unos cuantos de estos recursos disponibles:

1) MSDN. Microsoft Developer Network. Probablemente la fuente de documentación más conocida. Es una web muy completa donde se puede encontrar información de todo tipo sobre las tecnologías Microsoft:


Como ejemplo, en el apartado "Documentación" se puede encontrar la referencia al API de Microsoft, lo que nos permitirá ver toda la información de todas las tecnologías, consultar namespaces, funciones, propiedades...


2) Microsoft TechNet. En esta página web Microsoft pone a disposición de la Comunidad TI numerosos recursos y herramientas. 

Aquí se pueden encontrar encuentran noticias, enlaces a descargas, solución de problemas, y una amplia comunidad de profesionales entre los que se encuentran MVP's de Microsoft, que intervienen en foros y escriben en blogs para ayudar a difundir las tecnologías Microsoft.

3) Páginas de recursos específicos. Debido a que Microsoft ofrece recursos y soluciones en múltiples campos, para sus productos más conocidos y utilizados es posible encontrar una página web específica que concentra toda la información relativa a dicho producto. Por ejemplo:

IIS.Net. Página web sobre Internet Information Server, el servidor web de Microsoft.
ASP.Net. Página web sobre ASP.Net, el framework web de Microsoft para la construcción de websites y aplicaciones web.
Visual Studio. Toda la información relativa al compilador de .Net Visual Studio, tanto en su versión off-line como en su versión on-line.
Microsoft .Net. Toda la información sobre el framework de programación .Net.
Azure. La nube de Microsoft. El acceso e información sobre la misma se puede encontrar aquí.

4) Blogs. Muchos profesionales, evangelistas, MVP's de Microsoft y principales responsables de los productos más utilizados escriben en blogs acerca de estos productos y tecnologías, como por ejemplo Scott Hanselman, Scott Guthrie o S. Somasegar. En español tenemos por ejemplo Geeks.ms, donde numerosos profesionales de Microsoft escriben numerosos artículos en castellano.

5) Microsoft Virtual Academy. Academia Virtual de Microsoft. Aquí se concentran múltiples cursos y eventos en directo. La inscripción con la cuenta de Outlook es gratuita, y una vez dentro se pueden buscar cursos por tecnología y crearse un plan de aprendizaje personalizado. Esta academia utiliza gamificación, de forma que por cada curso terminado se nos otorgan unos puntos que nos clasifican en el conjunto de usuarios registrados, y además es posible obtener puntos de bonificación. La mayoría de los vídeos de los cursos se encuentran en inglés, pero muchos de ellos tienen subtítulos disponibles. Estos cursos están impartidos por profesionales de Microsoft.

Finalmente, es muy importante destacar, que aunque estos recursos se encuentran focalizados en tecnologías Microsoft, hay que tener en cuenta que Microsoft se está abriendo cada vez más a la integración y uso de otras tecnologías, especialmente al software libre (Open Source). Por eso no debe extrañar ver un curso sobre MongoDB o Git en la Microsoft Virtual Academy, o que al utilizar Azure se pueda configurar y utilizar una máquina virtual Linux, o que incluso el código fuente del framework .Net esté disponible en GitHub. Así que no es de extrañar el poder encontrar información sobre otras tecnologías en estas páginas, y no sólo de las tecnologías Microsoft.

Espero que esta información os sea útil y os facilite un poco más el trabajo del día a día con tecnologías y productos Microsoft como me lo facilita a mí.