3 - Configuración inicial de un proyecto

Objetivo del tema

En este tema aprenderás a crear proyectos desde cero con Apache Maven, revisar los arquetipos disponibles, importar el resultado en IDEs populares, ajustar un pom.xml mínimo y adoptar la filosofía de convenciones sobre configuración.

3.1 Crear un proyecto con mvn archetype:generate

El plugin maven-archetype-plugin incluye el objetivo generate, que scaffoldeará una estructura de proyecto siguiendo un modelo prediseñado. Ejecuta el comando desde una carpeta vacía o donde quieras que se cree la nueva estructura.

mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DarchetypeVersion=1.4 \
  -DgroupId=com.ejemplo.app \
  -DartifactId=demo-maven \
  -DinteractiveMode=false

En Windows ejecuta el comando en una sola línea o utiliza el carácter de continuación apropiado para tu terminal (PowerShell: `, CMD: ^). Esta es la versión en una sola línea:

mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DgroupId=com.ejemplo.app -DartifactId=demo-maven -DinteractiveMode=false
Ejecución de mvn archetype:generate en Windows
  • archetypeGroupId apunta al repositorio oficial de arquetipos de Apache Maven.
  • archetypeArtifactId selecciona el arquetipo; el quickstart genera un proyecto Java básico.
  • groupId corresponde al dominio invertido o namespace que agrupa los artefactos de la organización.
  • artifactId identifica el proyecto dentro del grupo y define la carpeta creada.
  • interactiveMode en false evita preguntas adicionales y toma los valores proporcionados en la línea de comandos.

Si omites parámetros, Maven ingresará en modo interactivo y pedirá cada valor. El comando también admite filtros por catálogo de arquetipos personalizados.

En ejecuciones con JDK recientes pueden aparecer advertencias sobre sun.misc.Unsafe; son mensajes informativos y no impiden la generación del proyecto.

3.2 Tipos de arquetipos disponibles

Los arquetipos actúan como plantillas para diferentes escenarios (aplicaciones web, microservicios, librerías, proyectos de integración). Además de los arquetipos oficiales, cada organización puede publicar los propios.

  • maven-archetype-quickstart: proyecto Java sencillo con pruebas unitarias.
  • maven-archetype-webapp: estructura inicial para aplicaciones con empaquetado WAR.
  • maven-archetype-archetype: plantilla para crear nuevos arquetipos corporativos.
  • catalogo corporativo: se define mediante un archivo archetype-catalog.xml alojado en un repositorio interno.

Para listar las opciones disponibles ejecuta mvn archetype:generate -DinteractiveMode=true; Maven mostrará catálogos remotos y permitirá filtrar por palabras clave.

3.3 Importar proyectos Maven en IDEs

Una vez generado el proyecto, puedes importarlo en IDEs que comprenden el modelo de Maven sin pasos adicionales. La mayoría detecta el pom.xml y sincroniza dependencias automáticamente.

  • IntelliJ IDEA permite abrir la carpeta como proyecto Maven, sincroniza dependencias y expone objetivos desde la ventana Maven.
    Importación de proyecto Maven en IntelliJ IDEA
  • Eclipse IDE incorpora la herramienta Import > Existing Maven Projects, que crea las configuraciones internas (.project, .classpath).
    Importación de proyecto Maven en Eclipse IDE
  • Visual Studio Code requiere la extensión Extension Pack for Java, tras lo cual detecta proyectos Maven y expone scripts en la paleta de comandos.
    Detección de proyecto Maven en Visual Studio Code

Si el IDE no reconoce el proyecto, ubica el pom.xml principal y fuerza una recarga o reimport para reconstruir la configuración.

3.4 Configuración mínima del pom.xml

El POM mínimo creado por los arquetipos incluye las coordenadas del proyecto y la dependencia de pruebas. Puedes ampliarlo declarando el nivel de lenguaje y dependencias propias sin sobrecargarlo de opciones.

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ejemplo.app</groupId>
  <artifactId>demo-maven</artifactId>
  <version>1.0.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
  • La sección properties fija la versión de Java utilizada por el plugin de compilación.
  • El scope test limita la dependencia a las fases de prueba.
  • El sufijo -SNAPSHOT denota versiones en desarrollo susceptibles a cambios frecuentes.

A medida que crece el proyecto, agrega solo dependencias y plugins imprescindibles; el resto de la configuración puede delegarse a perfiles o herencias más adelante.

3.5 Convenciones sobre configuración

Maven reduce la configuración explĂ­cita apoyándose en convenciones. Adoptarlas desde el inicio acelera la colaboración y evita ajustes innecesarios.

  • Respeta la estructura estándar de carpetas para que plugins y herramientas funcionen sin personalizaciones.
  • Utiliza los identificadores de artefacto en minúsculas y con guiones cuando sea necesario para mantener uniformidad.
  • Centraliza versiones en <properties> para facilitar actualizaciones y evitar discrepancias.
  • Evita duplicar configuraciones que ya provee el padre o arquetipo; sobrescribe solo lo que realmente requiere el proyecto.

Estas buenas prácticas garantizan que cualquier integrante del equipo pueda compilar el proyecto sin sorpresas y que las configuraciones avanzadas se construyan sobre una base sólida.

Resumen didáctico

Generar un proyecto con arquetipos, conocer las plantillas disponibles, importar el resultado en IDEs compatibles y mantener un pom.xml sencillo son los pilares para iniciar proyectos con Maven. Las convenciones sobre configuración minimizan los ajustes manuales y preservan la coherencia entre entornos de desarrollo, pruebas y producción.