Project Object Model (POM) de Maven
Un fichero POM de Maven contiene toda la información necesaria de un proyecto y de la configuración de los plugins a usar durante el proceso de construcción. Es decir, es la especificación declarativa del "quién", "qué" y "dónde", mientras que el ciclo de vida es el "cuándo" y el"cómo". Aunque el POM puede afectar al propio flujo del ciclo de vida.
Estos son los elementos que pueden definirse en un fichero POM (se ha considerado la versión 4.4.0, la única soportada actualmente en Maven 2). Los elementos optativos que no se declaren se heredarán de la configuración estándar por defecto de Maven (Super POM).
<project>groupId, artifactId y version
<modelVersion>4.0.0</modelVersion>
<!-- Los básicos -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Configuración de construcción -->
<build>...</build>
<reporting>...</reporting>
<!-- Otra información del proyecto -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Configuración de entorno -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
Son las coordenadas (espacial y temporal) de un proyecto en un repositorio Maven. Uno es el nombre del grupo de proyectos (p.e. org.apache.maven), otro es el del proyecto (p.e. mi-proyecto) y el último es la versión (p.e. 1.1).
packaging
Es el tipode artefacto que se genera en el proyecto (p.e. jar (por defecto), war, etc).
dependencies
Recoge las dependencias con otros proyectos durante la construcción o ejecución. Entre otras cosas sirven para que Maven los descargue y los incluya automáticamente cuando corresponda.
<dependencies>parent
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<classifier>memory</classifier>
<optional>true</optional>
</dependency>
...
</dependencies>
Para indicar el proyecto padre del que heredar sus características. Están características podrán matizarse en el proyecto actual. Si no se indica, se considera que se hereda del Super POM, la configuración de proyecto estándar de Maven.
dependencyManagement
Es usado por un POM padre para definir propiedades sobre dependencias de los hijos, de forma que sean declaradas únicamente en un sitio.
modules
Para declarar los módulos que componen un proyecto, en el caso de que sea multi-módulo. Cada uno de estos módulos será a su vez otro proyecto Maven ubicado directamente en el proyecto principal.
NOTA: El hecho de que un proyecto seamulti-módulo (modules) es totalmente independiente de que exista herencia entre ellos (parent).
properties
Propiedades que pueden definirse, de forma que puedan ser usadas en el resto de la configuración del proyecto en la forma: ${propiedad}.
build
En estos elementos se declara, entre otras cosas, la estructura de directorios del proyecto:
<build>La fase u objetivo a ejecutar por defecto, el directorio de construcción, nombre del producto final y ficheros de propiedades a usar:
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
...
</build>
<build>Se declara la ubicación de los archivos de recursos:
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<filters>
<filter>filters/filter1.properties</filter>
</filters>
...
</build>
<build>Los plugins, indicando si cargar las extensiones de cada plugin, si la configuración es heredable por proyectos hijos, y la propia configuración de cada plugin, dependencias y objetivos a ejecutar.
...
<resources>
<resource>
<targetPath>META-INF/plexus</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include>configuration.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<testResources>
...
</testResources>
...
</build>
<build>La gestión de plugins:
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>echodir</id>
<goals>
<goal>run</goal>
</goals>
<phase>verify</phase>
<inherited>false</inherited>
<configuration>
<tasks>
<echo>Build Dir: ${project.build.directory}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>Y las extensiones: otros artefactos a activar durante la construcción.
...
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>pre-process-classes</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>pre-process</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
...
</build>
<project>
<build>
...
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-3</version>
</extension>
</extensions>
...
</build>
</project>
0 comentarios
Publicar un comentario en la entrada