Ir al contenido principal

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.

Entradas populares de este blog

Un bot con Telegram en Termux

En las últimas semanas he retomado un par de ideas que tuve hace algunos años: por un lado la idea de hacer un Bot con el que hacer operaciones a través de comandos específicos. En concreto me gustaría hacer poder realizar comandos de inversión en bolsa (de manera ficticia) por otro lado desplegar la aplicación en un móvil con Termux (emulador de Linux para Android) Así que os cuento los pasos que he hecho para realizar estas tareas. Creación de Bot con Telegram Busca el contacto @BotFather (es el bot oficial de Telegram para crear otros Bots). Pulsa en Iniciar o escribe /start para comenzar. Escribe el comando: /newbot BotFather te pedirá que le pongas un nombre visible a tu Bot. Ejemplo: Nombre: MiBotJava Luego te pedirá un username único que termine en Bot. Ejemplo: Username: MiBotJava_bot Si el nombre de usuario está disponible, te dará un mensaje de éxito. Obtén el token Después de crear el Bot, BotFather te dará un mensaje como este: Done! Congratulations on your new bot. You wil...

Spring Boot: Página inicial con Bootstrap

  Este es el segundo artículo de la serie sobre Spring Boot que comenzamos hace dos semanas, si quieres ver el primero puedes acceder pulsando aquí . En el primer artículo vimos cómo descargar nuestro proyecto configurado para nuestros intereses y listo para ser importado en nuestro IDE (nosotros usaremos Eclipse ). Lo primero que vamos a hacer es importar el proyecto: File -> Import Existing Maven Projects Seleccionamos el fichero pom.xml en la carpeta donde lo hemos descomprimido y esperamos unos segundos Cuando acabe la importación, esta es la estructura que nos aparecerá: Con Spring Boot no necesitamos configurar el servidor, ya se encarga él de facilitarnos la vida. Lo único que tenemos que hacer es arrancar la clase BootApplication.java , que se encargará de arrancar Tomcat y dejar nuestra aplicación funcionando en el puerto 8080.  Y si todo fuera bien, podríamos acceder a través de la URL:  http://localhost:8080/ Pero ahora mismo tenemos un error de conexión c...

Control Parental en Windows: navegadores

  Este año, mis hijos ya han empezado a necesitar trabajar en casa con ordenadores. De momento, solo para navegar, con un par de aplicaciones web que les indican en el colegio. Pero claro, esto ya conlleva una serie de riesgos que estamos intentando paliar: Paso 1: aplicaciones no deseadas Los ordenadores que tenemos son Windows, y para empezar lo que hemos hecho es utilizar cuentas con contraseña: una cuenta con privilegios de administrador para nosotros (los padres), y otra sin privilegios para los niños. Con esto conseguimos que no puedan instalar nada que nosotros no queramos... Sí, se lo pueden saltar, pero todavía no lo saben. Paso 2: control de páginas que visitan Esto ya es más complicado. He estado buscando, incluso programando soluciones, pero al final he descubierto Kurupira : https://www.kurupira.net/en Básicamente, monitoriza todas las URLs que pasan por cualquier navegador (por cualquiera que esté instalado), sin utilizar proxy ni nada parecido. Por defecto, tiene un ...