Introducción a Maven - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
Vamos a introducirnos en el uso de Maven, una herramienta muy utilizada en proyectos Java para automatizar la compilación y gestionar dependencias.
Una de sus grandes ventajas es que nos permite unificar la estructura del proyecto y declarar todas sus librerías externas en un único archivo: pom.xml.
Cuando creamos un proyecto con Maven, obtenemos una estructura estándar como esta:
-
/src/main/webapp: en esta carpeta colocamos los archivos web (HTML, JSP). -
pom.xml: es el corazón del proyecto, donde declaramos todo lo necesario para construirlo. En el archivopom.xmldefinimos elementos como: -
groupId: el grupo o institución responsable. -
artifactId: el nombre del proyecto. -
version: la versión del artefacto.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.utu</groupId>
<artifactId>demo1</artifactId>
<version>1.0</version>
</project>Vamos a crear nuestro primer proyecto con Maven directamente desde Visual Studio Code:
- Abrimos VSCode y seleccionamos una carpeta de trabajo con Open Folder....
Vamos a poder ver un archivo index.jsp como punto de inicio.
Para que nuestra app web funcione correctamente, vamos a agregar las dependencias para trabajar con servlets y JSTL, y los plugins para empaquetar y desplegar en Tomcat.
Dentro de <properties>, agregamos una propiedad con la ruta donde descomprimimos Tomcat:
<tomcat.home>C:\apache-tomcat-10.1.57</tomcat.home>
⚠️ Si nuestro Tomcat está en otra carpeta o tiene otro número de versión, cambiamos esta línea por la ruta real. Es el único lugar delpom.xmldonde aparece la ruta.
Entre las etiquetas <dependencies>, agregamos:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
⚠️ Ojo con elgroupId/artifactId: esjakarta.servlet(nojavax.servlet). Tomcat 10 y versiones posteriores usan el namespacejakarta.*.
💡 La Servlet API lleva
scope providedporque Tomcat ya la trae. JSTL, en cambio, no viene con Tomcat: por eso se empaqueta dentro del.war. La usaremos más adelante con las etiquetas<c:...>.
Dentro de <plugins>, vamos a incluir:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.10.13</version>
<configuration>
<container>
<containerId>tomcat10x</containerId>
<home>${tomcat.home}</home>
</container>
<configuration>
<type>existing</type>
<home>${tomcat.home}</home>
</configuration>
</configuration>
</plugin>-
maven-war-plugin: genera el.war. Fijamos la versión para que el proyecto se compile igual en todas las máquinas. -
cargo-maven3-plugin: despliega el.waren el Tomcat que indicamos entomcat.home.
💡 Si en una máquina Tomcat está en otra ruta, también se puede indicar al ejecutar, sin tocar el
pom.xml:mvn cargo:run -Dtomcat.home=D:\otra\ruta.
⚠️ También se pueden agregar dependencias gráficamente desde la pestaña Maven, haciendo clic derecho sobre "Dependencies" → "Add Dependency".
Este es el pom.xml que usan todos los proyectos web del curso. Para un proyecto nuevo, solo cambiamos artifactId, name y finalName.
Ver pom.xml completo
```xml
4.0.0
com.utu demo1 1.0 war
demo1 Maven Webapp http://www.example.com
UTF-8 17 17 C:\apache-tomcat-10.1.57 jakarta.servlet jakarta.servlet-api 6.0.0 provided jakarta.servlet.jsp.jstl jakarta.servlet.jsp.jstl-api 3.0.0 org.glassfish.web jakarta.servlet.jsp.jstl 3.0.1 demo1 org.apache.maven.plugins maven-war-plugin 3.4.0 false org.codehaus.cargo cargo-maven3-plugin 1.10.13 tomcat10xDesde la terminal integrada (Ctrl+Ñ), escribimos:
mvn clean package
mvn cargo:runVamos a ver que se genera un .war, y luego el proyecto se desplegará en el Tomcat 10.1 instalado, accesible en:
http://localhost:8080/demo1Que se verá así en el navegador
Vamos a editar el archivo index.jsp para probar que todo funciona:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hola desde VS con Maven</title>
</head>
<body>
<h1>Mi primer archivo JSP</h1>
<p>Este es mi primer proyecto creado utilizando Maven y VS</p>
</body>
</html>Guardamos el archivo y recargamos el navegador. Ya deberíamos ver nuestra página personalizada.
Para trabajar con servlets, vamos a crear una clase Java:
Para ir acostumbrandonos a la estructura que usaremos más adelante lo haremos así:
- Creamos una carpeta (Folder) llamada
javaen/src/main - Creamos un package dentro de
/src/main/java, llamadocontrolador. - Dentro del package
controlador, creamos el archivoPrimerServlet.java. Agregamos el siguiente código (más adelante se explicará) para probar:
package controlador;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
@WebServlet("/Servlet1")
public class PrimerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("<h1>Hola desde el VS Code</h1>");
}
}- En el archivo
index.jsp, agregamos un enlace:
<a href="Servlet1">Ir al servlet</a>Repetimos los comandos para compilar y desplegar:
mvn clean package
mvn cargo:runY ahora, al hacer clic en el enlace, vamos a ver el contenido del servlet.
| Elemento | Recomendación |
|---|---|
| Plugin Tomcat |
cargo-maven3-plugin agregado al pom.xml, apuntando a un Tomcat 10.1 instalado |
| Estructura del proyecto |
/src/main/java y /webapp como carpetas estándar |
| Extensiones en VSCode |
Java Pack, Maven for Java, JSP Support
|
| Variables de entorno |
JAVA_HOME (JDK 17), MAVEN_HOME, y Path configuradas |
| Imports en Servlets |
jakarta.servlet.* (no javax.servlet.*) |
📦 Proyecto:
demo1(Introducción a Maven) — ⬇️ Descargar · ☁️ Abrir en Codespace
Maven · pom.xml · dependencias · groupId · artifactId · version · maven-archetype-webapp · mvn clean package · cargo:run · jakarta.servlet-api · scope provided · estructura de proyecto Maven · cargo-maven3-plugin
← Mini Tutorial de HTML · 🏠 Inicio · Ciclo de una petición web →
