馃洜 Plantilla Maven Java 21 con Jetty, JasperReports, Gson y m谩s

Si est谩s desarrollando una aplicaci贸n Java moderna basada en servlets y necesitas una configuraci贸n completa con soporte para PDF, reportes, HTML din谩mico y m谩s, esta plantilla Maven te puede ahorrar mucho tiempo. La he usado para varios proyectos y est谩 pensada para correr en Jetty o Tomcat sin depender de Spring Boot.

Incluye integraci贸n con:

  • Java 21
  • Servidor Jetty 11 (compatible con Jakarta EE 10)
  • JasperReports
  • Gson para JSON
  • Thymeleaf para vistas HTML
  • MySQL Connector
  • iTextPDF para generar PDFs
  • Log4j 2 para logging
  • Soporte para carga de archivos
  • Y m谩s...

馃摝 Estructura del pom.xml

Aqu铆 te dejo el pom.xml completo listo para usar. Solo necesitas cambiar el mainClass en el plugin exec-maven-plugin y en el maven-assembly-plugin si tu clase principal tiene otro nombre.

<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/POM/4.0.0/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.egga</groupId>
    <artifactId>appventas</artifactId>
    <version>0.1</version>
    <packaging>jar</packaging>

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

    <dependencies>
        <!-- Jetty y Jakarta Servlet API -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>11.0.23</version>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>11.0.23</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>9.0.44</version>
        </dependency>

        <!-- Motor de plantillas Thymeleaf -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.1.3.RELEASE</version>
        </dependency>

        <!-- Gson para JSON -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- JasperReports -->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.21.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports-functions</artifactId>
            <version>6.20.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports-fonts</artifactId>
            <version>6.20.0</version>
        </dependency>

        <!-- PDF con iText -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.4</version>
        </dependency>

        <!-- Cifrado y seguridad -->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.70</version>
        </dependency>

        <!-- Conector MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <!-- Carga de archivos -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.5</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.23.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.23.1</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <source>21</source>
                    <target>21</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <mainClass>com.egga.appventas.Appventas</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.7.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.egga.appventas.Appventas</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

▶️ C贸mo ejecutar

Una vez que tengas tu clase principal configurada (Appventas en este caso), puedes correr el proyecto con:

mvn clean compile exec:java

O generar el .jar ejecutable:

mvn clean package

Y luego correrlo:

java -jar target/appventas-0.1-jar-with-dependencies.jar

馃搧 ¿Para qui茅n es 煤til esta plantilla?

  • Para desarrolladores que quieren una base s贸lida sin usar Spring Boot
  • Para aplicaciones portables que corren en cualquier contenedor Servlet compatible
  • Para quienes trabajan con JasperReports e iTextPDF
  • Para quienes buscan una forma r谩pida de integrar Jetty en sus proyectos

馃挰 Comentarios

¿Te gustar铆a que prepare una versi贸n con Spring Boot? ¿O una con Tomcat embebido? D茅jame tu opini贸n en los comentarios o escr铆beme por correo.

¡Espero que esta plantilla te sea 煤til! 馃殌

Comentarios

Entradas populares de este blog

Configurando Servlets y JSP en Jetty

Firma de un Documento XML con Certificado Digital en Java para Uso Tributario en Chile

RESOLUCION SET BASICO DE FACTURA ELECTR脫NICA SII