Maven¶
En Sidelab siempre estamos tratando de mejorar los métodos de desarrollo que utilizamos. Muchas veces no lo hacemos por falta de tiempo, pero en cuanto tenemos un rato nos ponemos manos a la obra. En este caso, hemos ido migrando algunos de nuestros proyectos a Maven, lo que nos ha facilitado mucho la vida. Ahora es más sencillo construir proyectos, sacar versiones, o simplemente correr un conjunto de tests. Pero si en algo hemos podido comprobar que ha aumentado nuestra producción ha sido en los productos basados en eclipse (pascaline, eclipsegavab, optsicomres, ...). Aquí puedes encontrar algunos recursos que hemos ido elaborando sobre Maven según íbamos aprendiendo.
- Instalación de Maven
- Cómo migrar un proyecto a Maven y prepararlo para un servidor de integración continua (Jenkins). Se trata del proyecto optsicomres, y se explica en detalle cómo adaptarlo a Maven y cómo preparar todo lo necesario para hacer versiones de desarrollo y releases con Jenkins.
- Cómo ejecutar aplicaciones como parte de una fase Maven
- Maven_Site_Generation
- EclipseBuilds
Según vamos teniendo tiempo vamos migrando más proyectos a Maven. Algunos son de libre distribución. Es el caso de pascaline. Si quieres ver cómo se pueden adaptar ciertos proyectos a Maven, este es también un buen sitio donde echar un ojo. El proyecto Pascaline es especialmente complejo. Se trata de un conjunto de plugins de Eclipse que proporcionan herramientas de desarrollo para Pascal. Está orientado al aprendizaje.
FAQ¶
Algunas cuestiones que hemos tenido que solucionar trabajando con Maven, para adaptar Maven a las peculiaridades de nuestros propios proyectos.
Utilizar Java 1.6 (o cualquier otra versión de Java)¶
Maven tiene la mala costumbre de utilizar por defecto Java 1.5 para compilar. En Eclipse, podemos ver JRE System Library [JavaSE-1.5] justo encima de las dependencias de Maven. Esto se puede cambiar añadiendo lo siguiente al POM y después pulsando el botón derecho sobre el proyecto y seleccionando Maven > Update Project Configuration:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Utilizar unas carpetas diferentes a las que asume Maven por defecto para los fuentes y los tests¶
Basta con incluir lo siguiente:
<build> <sourceDirectory>src</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> </build>
Tener varias carpetas de código fuente¶
El enfoque aquí descrito lo encontré en esta entrada.
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-sandbox-sources</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>sandbox</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
Utilizar una versión determinada de junit¶
El plugin de surefire que utiliza Maven por defecto para ejecutar los tests trata de inferir la versión de junit a utilizar. Esto puede ser peligroso, si no sabemos exactamente cómo lo hace. Se puede configurar la versión a utilizar en el POM padre:
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement>
Luego, en aquellos módulos en los que queremos utilizar junit podemos especificar el artefacto sin incluir la versión: ésta se tomará de lo definido en el POM padre:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
¿Qué versiones de los plugins de Maven son compatibles con Maven3?¶
La información sobre algunos de los plugins de Maven y su compatibilidad con Maven 3 se puede encontrar aquí.
Estoy utilizando m2eclipse y mi proyecto no detecta las carpetas fuentes¶
Botón derecho en el projecto > Maven > Update project configuration. Si aun así Eclipse no detecta qué carpetas son las que contienen los fuentes, es posible que no estés utilizando las carpetas por defecto de Maven. En tal caso debes especificar qué carpetas se deben usar como fuentes en el POM del módulo.
Empaquetar varios módulos de un proyecto en un único jar¶
Es posible que tengamos el proyecto dividido en varios módulos, pero queramos generar un único jar para todos o varios de esos módulos. Esto es posible siguiendo las indicaciones que se dan aquí.