Acá muestro un ejemplo de una aplicación multi-modulo usando maven.
El ejemplo esta basado en este articulo: Chapter 7. Multi-module Enterprise Project
Descripción
Básicamente este ejemplo es solo una aplicación que muestra un el texto “Hola Mundo”.
Esta aplicación esta compuesta por dos módulos: ‘my-webapp’, que define una sevlet que imprime un mensaje y ‘my-module’ que contiene un servicio que devuelve el mensaje que imprime la servlet.
Esta es la estructura de directorios y archivos:
multiapp/
¦ pom.xml
+---my-module
¦ ¦ pom.xml
¦ +---src
¦ +---main
¦ +---java
¦ HelloWorldService.java
+---my-webapp
¦ my-webapp.iml
¦ pom.xml
+---src
+---main
+---java
¦ HelloWorldServlet.java
+---webapp
¦ index.jsp
+---WEB-INF
web.xml
Archivos pom.xml
pom.xml principal
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>edu.renan</groupId> <artifactId>multiapp</artifactId> <packaging>pom</packaging> <version>1.0</version> <name>Test Modules App</name> <modules> <module>my-module</module> <module>my-webapp</module> </modules> <dependencies> <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-testing-testng</artifactId> <version>2.2.2</version> </dependency> </dependencies> <build> <finalName>multiapp</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> </project> |
La parte importante en el pom.xml principal es que se definen los módulos: my-webapp y my-module dentro de la etiqueta <modules>
También hay que tomar en cuenta que el packaging es definido como ‘pom’
pom.xml – my-module
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>edu.renan</groupId> <artifactId>testmodules</artifactId> <version>1.0</version> </parent> <artifactId>my-module</artifactId> <packaging>jar</packaging> <name>my-module</name> </project> |
Acá estamos definiendo cual sera el modulo padre usando la etiqueta ≷parent> y el packaging como ‘jar’. Utilice jar por que este modulo generara un jar file.
pom.xml – my-webapp
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>edu.renan</groupId> <artifactId>testmodules</artifactId> <version>1.0</version> </parent> <artifactId>my-webapp</artifactId> <packaging>war</packaging> <version>1.0</version> <name>my-webapp</name> <dependencies> <dependency> <groupId>servletapi</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>edu.renan</groupId> <artifactId>my-module</artifactId> <version>1.0</version> </dependency> </dependencies> <build> <finalName>mywebapp</finalName> </build> </project> |
Acá definimos un parent lo mismo que el anterior, pero para el packaging usamos ‘war’, por que este modulo generara una aplicación web.
Classes java y web.xml
HelloWorldService
public class HelloWorldService { public String sayHello(){ return "Hola Mundo"; } } |
Como verán es solo una clase con un método con un método que retorna el mensaje “Hola Mundo”.
HelloWorldServlet
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HelloWorldService helloWorldService = new HelloWorldService(); response.getWriter().println(helloWorldService.sayHello()); } } |
Esta servlet solo llama al servicio definido anteriormente.
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>My Web App</display-name> <servlet> <servlet-name>helloWorldServlet</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloWorldServlet</servlet-name> <url-pattern>/helloWorld</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
Espero este ejemplo les sirva mucho, si quieren mas recursos acá tienen algunos que encontré:
- Multi-modules projects
- Chapter 7. Multi-module Enterprise Project
- best practices – version management in multi project
El código fuente lo pueden encontrar en https://github.com/rhuanca/examples/tree/master/maven-multimodule.