Plantilla Maven para Spring Boot

 Durante el desarrollo de aplicaciones Java es común utilizar Spring Initializr para generar un nuevo proyecto. Sin embargo, en algunos entornos esta alternativa puede no ser la más conveniente.

Con el tiempo he preferido mantener una plantilla Maven propia para Spring Boot, preparada y probada en mi entorno de desarrollo.

Las ventajas de este enfoque son:

  • Configuración conocida y controlada.
  • Dependencias previamente verificadas.
  • Estructura consistente entre proyectos.
  • Independencia de servicios externos para generar un proyecto.
  • Posibilidad de adaptar la plantilla a necesidades específicas.

En entornos corporativos también es habitual que las organizaciones mantengan sus propias plantillas o arquetipos Maven, permitiendo estandarizar la creación de nuevos proyectos y evitar diferencias entre desarrolladores.

Esto no significa que Spring Initializr sea una mala herramienta. Al contrario, resulta muy útil para comenzar rápidamente un proyecto. Sin embargo, disponer de una plantilla propia ofrece mayor control sobre la configuración y facilita la reproducibilidad del entorno de desarrollo.



<?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
             https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>4.1.0</version>
        <relativePath/>
    </parent>

    <groupId>com.egga</groupId>
    <artifactId>Ejemplo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Ejemplo1</name>
    <description>Ejemplo Spring Boot con Jetty, JPA y MySQL</description>

    <properties>
        <java.version>21</java.version>

        <project.build.sourceEncoding>
            UTF-8
        </project.build.sourceEncoding>

        <project.reporting.outputEncoding>
            UTF-8
        </project.reporting.outputEncoding>

        <!-- Clase principal usada por Spring Boot -->
        <start-class>
            com.egga.ejemplo1.Ejemplo1
        </start-class>

        <!-- Clase principal usada por NetBeans/exec-maven-plugin -->
        <exec.mainClass>
            com.egga.ejemplo1.Ejemplo1
        </exec.mainClass>
    </properties>

    <dependencies>

        <!-- Spring MVC sin Tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>
                        spring-boot-starter-tomcat
                    </artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Jetty como servidor web embebido -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

        <!-- Spring Data JPA, Hibernate y Jakarta Persistence -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>
                spring-boot-starter-data-jpa
            </artifactId>
        </dependency>

        <!-- Driver JDBC de MySQL -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Herramientas para desarrollo -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- Pruebas -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>

            <!-- Compilación con Java 21 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <release>21</release>
                </configuration>
            </plugin>

            <!-- Generación del JAR ejecutable de Spring Boot -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>
                    spring-boot-maven-plugin
                </artifactId>

                <configuration>
                    <mainClass>
                        com.egga.ejemplo1.Ejemplo1
                    </mainClass>
                </configuration>
            </plugin>

            <!-- Ejecución directa desde NetBeans o Maven -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.5.1</version>

                <configuration>
                    <mainClass>
                        com.egga.ejemplo1.Ejemplo1
                    </mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

Comentarios

Entradas populares de este blog

Boleta Electrónica en Chile: Los 3 Ambientes del SII para Desarrolladores

Configurando Servlets y JSP en Jetty

GUIA GENERAL DE GENERACION DE DOCUMENTOS TRIBUTARIOS ELECTRONICOS