Ir al contenido principal

Cómo crear un proyecto multimódulo con Maven

Un proyecto software suele tener diferentes módulos para separar así la parte web, la lógica de negocio, etc ... Maven nos permite crear estos proyectos multimódulos donde, tenemos un proyecto padre con su pom.xml referenciando a los módulos, pudiendo ser estos de diferentes tipos (jar, war, ...).

Los pasos a seguir son: crear el proyecto padre y después ir creando todos los módulos que necesitemos.

1) Creamos el proyecto padre
mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=1.1 \
-DgroupId=com.examples \
-DartifactId=myExample

El arquetipo pom-root nos crea un nuevo directorio que sólo contiene el pom.xml. Lo que conviene resaltar de este pom.xml es que en <packaging> pone pom, indicando así que es un proyecto padre.
<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>com.examples</groupId>
 <artifactId>myExample</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>pom</packaging>
 <name>myExample</name>
</project>

2) Creamos un módulo

En el directorio donde se encuentra el pom.xml del proyecto padre utilizamos mvn para crear un nuevo proyecto, que en este caso será nuestro primer módulo. Para este ejemplo voy a utilizar el arquetipo maven-archetype-quickstart, pero vosotros podéis utilizar cualquier otro, según el tipo del módulo que queráis crear.
mvn archetype:generate \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DgroupId=com.examples.common \
-DartifactId=myExample-common

Este comando nos genera el directorio myExample-common dentro de myExample, nuestro proyecto padre, con su pom.xml y directorio src correspondiente.

Si vamos otra vez al pom.xml del proyecto padre vemos que Maven nos ha añadido automáticamente el nuevo módulo que acabamos de crear!! :)
<?xml version="1.0" encoding="UTF-8"?>
<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>com.examples</groupId>
 <artifactId>myExample</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>pom</packaging>
 <name>myExample</name>
 <modules>
 <module>myExample-common</module>
 </modules>
</project>

Así de fácil podemos seguir creando todos los módulos que necesitemos en nuestro proyecto.

Por cierto, si ejecutamos 'mvn clean install' en el directorio padre, también se ejecutará en todos los submódulos.


Comentarios

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida: ...

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session...

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una v...