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.


📁 Estructura típica de un proyecto Maven

Cuando creamos un proyecto con Maven, obtenemos una estructura estándar como esta:

Estructura de un proyecto web

  • /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 archivo pom.xml definimos 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>

💠 Crear un proyecto Maven en VSCode

Vamos a crear nuestro primer proyecto con Maven directamente desde Visual Studio Code:

  1. Abrimos VSCode y seleccionamos una carpeta de trabajo con Open Folder....

Ventana inicial de VSCode

2. Nos dirigimos al ícono de **Explorador** (panel izquierdo).

Explorador de VSCode

3. En la pestaña **Maven**, hacemos clic en el símbolo ➕.

Proyecto Maven en VSCode

4. Elegimos la plantilla `maven-archetype-webapp`.

maven archetype webapp

5. Aceptamos las opciones que nos propone (o personalizamos). 6. Ingresamos el número de versión (por ejemplo `1`) y confirmamos.

versión del proyecto

Muestra lo que va a crear

Datos del proyecto

Damos enter para finalizar

Proyecto creado con exito

VSCode va a generar el proyecto con la estructura que mencionamos antes.

Vamos a poder ver un archivo index.jsp como punto de inicio.

Index por defecto

---

🧹 Agregar dependencias al pom.xml

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.

📌 Ruta de 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 del pom.xml donde aparece la ruta.

📌 Servlet API y JSTL

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 el groupId/artifactId: es jakarta.servlet (no javax.servlet). Tomcat 10 y versiones posteriores usan el namespace jakarta.*.

💡 La Servlet API lleva scope provided porque 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:...>.

📌 Plugins

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 .war en el Tomcat que indicamos en tomcat.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".

📄 pom.xml completo

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 tomcat10x ${tomcat.home} existing ${tomcat.home} ```
> 💡 Cuando lleguemos a la conexión con base de datos (Tema 3), a este mismo `pom.xml` le agregaremos una sola dependencia más: el conector de MySQL (`com.mysql:mysql-connector-j`).

🚀 Compilamos y ejecutamos el proyecto

Desde la terminal integrada (Ctrl+Ñ), escribimos:

mvn clean package
mvn cargo:run

Vamos a ver que se genera un .war, y luego el proyecto se desplegará en el Tomcat 10.1 instalado, accesible en:

http://localhost:8080/demo1

Que se verá así en el navegador

Hello World

---

🧠 Editamos el archivo index.jsp

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.

Hola desde VS con Maven

---

🔁 Agregar un servlet

Para trabajar con servlets, vamos a crear una clase Java:

Para ir acostumbrandonos a la estructura que usaremos más adelante lo haremos así:

  1. Creamos una carpeta (Folder) llamada java en /src/main
  2. Creamos un package dentro de /src/main/java, llamado controlador.
  3. Dentro del package controlador, creamos el archivo PrimerServlet.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>");
  }
}
  1. 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:run

Y ahora, al hacer clic en el enlace, vamos a ver el contenido del servlet.

Servlet1

---

📄 Cosas que conviene revisar

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


📋 Palabras clave

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


🧠 Autoevaluación — Maven


← Mini Tutorial de HTML · 🏠 Inicio · Ciclo de una petición web →

⚠️ **GitHub.com Fallback** ⚠️