Segundo artículo desde el pasado, en el que trato dos temas acerca de Apache Maven: Qué hacer cuando tenemos dependencias a artefactos que no están en ningún repositorio, y un comando para cambiar la versión de todos los ficheros pom.xml de un proyecto multimódulo.
[Este artículo se basa en el publicado el 25 de mayo de 2010 en http://potoblof.blogspot.de/2010/05/un-par-de-funcionalidades-de-maven-2.html]
Dependencias a artefactos que no están en ningún repositorio.
Un problema recurrente en Apache Maven es cómo usar y versionar artefactos que no hay en ningún repositorio público. Se pueden instalar (mvn deploy) en el repositorio privado de la empresa, pero si quieres distribuir el código fuente, éste no va a compilar si Maven no puede encontrar las dependencias, por lo que es necesario instalar (mvn install) dichas dependencias en el repositorio local antes de construir el proyecto.
La solución que propongo automatiza la instalación de éstas dependencias usando un fichero pom.xml de Maven, pudiendo ser el del mismo proyecto o un proyecto separado que sólo contenga los artefactos a instalar y el fichero de descripción propuesto.
Si esta solución no te convence, existen otras alternativas, como usar el scope system, o versionar un repositorio privado del proyecto.
La idea es guardar los jars necesarios en el directorio lib de un proyecto e instalarlos en el repositorio local durante la fase ‘initialize’ usando el plugin ‘maven-install-plugin’. En mi caso me hizo falta para incluir en mi aplicación el puente PHP/Java.
Esta es la configuración necesaria en el fichero pom.xml:
<project> ... <plugins>
<
plugin
>
<
artifactId
>
maven-install-plugin
<
/artifactId
>
<
executions
>
<
execution
>
<
id
>
install-javabridge-javabridge
<
/id
>
<
phase
>
initialize
<
/phase
>
<
goals
>
<
goal
>
install-file
<
/goal
>
<
/goals
>
<
configuration
>
<
file
>
lib/JavaBridge.jar
<
/file
>
<
groupId
>
net.sourceforge.phpjavabridge
<
/groupId
>
<
artifactId
>
JavaBridge
<
/artifactId
>
<
packaging
>
jar
<
/packaging
>
<
version
>6.2.1<
/version
>
<
/configuration
>
<
/execution
>
<
/executions
>
<
/plugin
>
<
/plugins
>
... </project>
versions:set
Existe un plugin en Maven para aumentar la versión en todos los módulos de un proyecto multimódulo. Estas son un ejemplo de las llamadas que utilizo desde el proyecto que agrupa los submódulos:
mvn versions:set -DnewVersion=1.2 mvn versions:commit