Frameworks a los chapazos: Maven (Parte 2/2)
Más Maven
Aun quedan temas por cubrir como herencia, super POM, Standard Directory Layout, Repositorios, Plugins, Arquetipos, instalación
Instalación
Podemos salir de la instlación, fácil, rápido y para toda la familia. Simplemente googleamos 'download maven' y el primer enlace deberia ser este:
https://maven.apache.org/download.cgi
Procedimiento
- Descargar los archivos binarios en zip o tar.zip según sistema operativo
- Alojarlos en alguna carpeta que nos resulte cómoda
- Setear esa ruta como
M2_HOME
(este nombre es por conveniencia) y agregarla alPATH
del sistema incluyendo a la carpetabin
donde se encuentra el comandomvn
, (set
en Windows yexport
en linux y mac) - verificar instalación en la terminal con el comando
mvn --version
ó-v
en su versión corta:
Herencia en Maven
En Maven, la herencia se refiere a la capacidad de un proyecto (o módulo) para heredar configuraciones y propiedades de un proyecto padre. Esto es útil para gestionar configuraciones comunes y evitar la duplicación de código.
¿Cómo Funciona?
En el
pom.xml
la herencia define un proyecto hijo hereda las configuraciones del proyecto padre.- Proyecto Padre (pom.xml):
- Proyecto Hijo (pom.xml):
<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/POM/4.0.0/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.8</version> </dependency> </dependencies> </dependencyManagement> </project>
<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/POM/4.0.0/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>child-project</artifactId> </project>
En este ejemplo, el proyecto hijo hereda las dependencias y configuraciones definidas en el proyecto padre, para el caso concreto mostrado, el hijo cuenta como dependencia
spring-core-5.3.8
porque su padre la declara como dependencia y se funciona como en la vida real, se heredan muchas caracteristicas de nuestros padres.
¿Qué es el Super POM?
El Super POM es el archivo de configuración base de Maven que se aplica a todos los proyectos. Define los valores predeterminados y comportamientos generales para todos los proyectos Maven. A términos de java, el super POM viene a ser como la clase
Object
, de la cúal todo heredan ímplicitamente de ésta, atributos y comportamientos.Características del Super POM:
- Ubicación: El Super POM está integrado en Maven y no se encuentra en tu proyecto.
- Configuraciones Predeterminadas: Incluye configuraciones predeterminadas para el proceso de construcción, como plugins predeterminados y propiedades. Ejemplo de Configuración en el Super POM
- No puedes ver ni modificar el Super POM directamente, pero puedes consultar su contenido en la documentación de Maven(https://maven.apache.org/ref/3.8.4/maven-model/maven.html#super-pom).
- O pueder ir a el xml, dentro del jar(la versión puede variar, pero coincide con la versión de maven) y está en la carpeta de instalación:
$MAVEN_HOME/lib/maven-model-builder-3.6.3.jar/org/apache/maven/model/pom-4.0.0.xml
Aquí podemos encontrar la definición del repositorio de maven central, la estructura de directorios, librerías básicas entre otras definiciones.
Standard Directory Layout
El Standard Directory Layout es la estructura de directorios recomendada para proyectos Maven. Facilita la organización del código fuente, recursos, pruebas, y otros archivos importantes.
Estructura de Directorios:
Estructura de Directorios:
project-root/ |-- src/ | |-- main/ | | |-- java/ # Código fuente principal | | |-- resources/ # Recursos (archivos de configuración, imágenes, etc.) | |-- test/ | |-- java/ # Código fuente de pruebas | |-- resources/ # Recursos de pruebas |-- target/ # Archivos generados (compilaciones, artefactos) |-- pom.xml # Archivo de configuración de Maven
Puede sobrescribir esta estructura de carpetas en tu pom, pero ¿para qué hacerlo?.
Repositorios
Los repositorios son ubicaciones donde Maven almacena artefactos (librerías, proyectos) y sus dependencias. Maven utiliza repositorios para buscar e instalar dependencias necesarias para el proyecto.
Tipos de Repositorios
- Repositorio Local: Almacena artefactos en tu máquina local (usualmente en el directorio
.m2/repository
). - Repositorio Central: El repositorio predeterminado al que Maven se conecta para descargar dependencias. Maven Central es el repositorio central más conocido.
- Repositorios Remotos: Otros repositorios externos que puedes configurar en tu archivo
pom.xml
.
Ejemplo de Configuración de Repositorios en
pom.xml
<repositories> <repository> <id>my-repo</id> <url>https://my.repo.url/repository</url> </repository> </repositories>
¿Qué son los Plugins en Maven?
Los plugins se definen en el archivo pom.xml y se configuran en la sección de
Ejemplo de Configuración de Plugin
<build>
.
Ejemplo de Configuración de Plugin
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
Arquetipos
Un arquetipo es una plantilla para crear proyectos Maven nuevos. Define una estructura de proyecto predeterminada y puede incluir archivos de configuración básicos, código de muestra, y otros recursos.
Crear un Proyecto Usando un Arquetipo:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Esto creará un nuevo proyecto basado en el arquetipo maven-archetype-quickstart.
No hay comentarios:
Publicar un comentario