El proceso de empaquetar el proyecto SpringBoot en un paquete jar / paquete war (basado en Maven)


Después de que se desarrolle el proyecto SpringBoot, debe empaquetarse en un paquete jar / paquete war, e implementarse y ejecutarse para completar el proceso de todo el proyecto.

1. En el archivo pom

<build>
   <finalName>DAG-1.0</finalName>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.8.1</version>
           <configuration>
               <source>11</source>
               <target>11</target>
           </configuration>
       </plugin>

       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <executions>
               <execution>
                   <goals>
                       <goal>repackage</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>

   <resources>
       <resource>
           <directory>src/main/resources</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
               <include>**/*.yml</include>
           </includes>
           <filtering>true</filtering>
       </resource>
       <resource>
           <directory>src/main/java</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
               <include>**/*.yml</include>
           </includes>
           <filtering>true</filtering>
       </resource>
   </resources>
</build>

1.1 complemento-compilador-maven

maven-compiler-pluginPuede especificar la versión del JDK en el proyecto y la versión del archivo de clase generado por la compilación especificada. En mi ejemplo, especifiqué que JDK11 se usó en el código fuente durante el desarrollo, y el archivo de clase generado también corresponde a JDK11.

1.2 plugin de Spring-Boot-Maven

spring-boot-maven-pluginComplementos empaquetados con Maven. repackageVuelva a empaquetar la aplicación. De forma predeterminada, los dos objetivos de maven de reempaquetar y ejecutar incluirán las dependencias definidas en el proyecto.

Es necesario excluir algunas dependencias del paquete jar ejecutable. Hay tres formas de excluir módulos dependientes mientras se ejecuta el paquete:

1.2.1 Excluir un módulo maven específico

La exclusión de un módulo maven específico se logra mediante una combinación única de groupId y artifactId. (Si es necesario, puede agregar un clasificador para confirmar de forma única).

<build>
    <finalName>DAG-1.0</finalName>
    <plugins>
        ......
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <excludes>
                    <excludes>
                        <groupId>com.foo</groupId>
                        <artifactId>bar</artifactId>
                    </excludes>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
    ......
</build>

Excluya el módulo de barra en com.foo.

1.2.2 Excluya todos los módulos de maven que coincidan con el "artifactId especificado"

Excluya todos los módulos de maven que coincidan con el "artifactId especificado".

<build>
    <finalName>DAG-1.0</finalName>
    <plugins>
        ......
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <excludes>
                    <excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
    ......
</build>

Excluidos artifactIdes decir my-lib, another-libtodos los módulos, es decir, todo groupIdinferior artifactIdpara el my-lib, another-libmódulo.

1.2.3 Excluir todos los módulos maven que pertenecen al "groupId especificado"

<build>
    <finalName>DAG-1.0</finalName>
    <plugins>
        ......
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <excludes>
                    <excludeGroupIds>com.foo</excludeGroupIds>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
    ......
</build>

Excluido groupIdcomo com.footodos los módulos.

2. Nombre del paquete del tarro

<finalName>Your jar Package Name</finalName>

La compilación fileNameespecifica el nombre del paquete jar generado por empaquetado.

3. Embalaje Maven

Ejecute los siguientes comandos en el directorio raíz del proyecto SpringBoot:

mvn package spring-boot:repackage

Puede generar la carpeta de destino en el directorio raíz, que contiene xxx.jar.

4. Ejecute el paquete jar

4.1 Consola que ejecuta el paquete jar

java -jar xxx.jar

4.2 Ejecute el paquete jar en segundo plano, cerrar la terminal no afecta la ejecución del paquete jar

nohup java -jar DAG-1.0.jar > msg.log 2>&1 &

El paquete jar se ejecuta en segundo plano, la información de registro se ingresa en el archivo msg.log y el registro de errores y el registro correcto se ingresan en msg.log.
Agregar un ampersand al final del comando significa que el proceso se ejecutará en segundo plano, de modo que volverá inmediatamente al estado de solicitud y podemos continuar haciendo lo siguiente.

4.3 Ejecute el paquete jar en segundo plano e ingrese el registro correcto y el registro incorrecto en diferentes archivos

nohup java -jar DAG-1.0.jar >> msg1.log 2>>msg2.log &

El registro correcto se ingresa en msg1.log y el registro incorrecto se ingresa en msg2.log.

5. Empaque y genere paquete de guerra

El paquete jar se genera de forma predeterminada. Especifique qué forma de paquete generar en el archivo pom

<packaging>war</packaging>
<name>DAG-1.0</name>
<description>DAG project for Spring Boot</description>

Ejecutar comandos de empaquetado

mvn package spring-boot:repackage

Inserte la descripción de la imagen aquí
Puede ver que se genera el paquete war y que se implementa el paquete war para ejecutar el programa.

6. Errores encontrados y precauciones

6.1 No se puede encontrar la página correspondiente al acceder a la página HTML

En este caso, primero debemos mirar si hay una carpeta de plantillas correspondiente debajo de la carpeta de destino generada y el archivo xxx.html que debería estar contenido en ella. Cuando el programa se está ejecutando, solo reconoce las cosas en la carpeta de destino. Si no hay una carpeta de plantillas correspondiente y un archivo xxx.html en la carpeta de destino, definitivamente es imposible abrir la página HTML.

La causa común de este error es que xxx.html no está especificado como el recurso del proyecto que se va a empaquetar. Esto debe especificarse en el archivo pom.

<build>
	......
	<resources>
	    <resource>
	        <directory>src/main/resources</directory>
	        <includes>
	            <include>**/*.properties</include>
	            <include>**/*.xml</include>
	            <include>**/*.yml</include>
	            <include>**/*.html</include>
	        </includes>
	        <filtering>true</filtering>
	    </resource>
	    <resource>
	        <directory>src/main/java</directory>
	        <includes>
	            <include>**/*.properties</include>
	            <include>**/*.xml</include>
	            <include>**/*.yml</include>
	        </includes>
	        <filtering>true</filtering>
	    </resource>
	</resources>
<build>

Como se indicó anteriormente, especifique el archivo .properties, el archivo .xml, el archivo .yml, el archivo .html en la carpeta src / main / resources y el archivo .properties, el archivo .xml, .yml en la carpeta src / main / java El archivo se utiliza como archivo de recursos del proyecto, por lo que el archivo html se puede encontrar en el archivo de destino generado.

Si elimina la indicación del archivo .html, el archivo HTML correspondiente no se puede encontrar en la carpeta de destino generada y la página HTML no se puede abrir.

<build>
	......
	<resources>
	    <resource>
	        <directory>src/main/resources</directory>
	        <includes>
	            <include>**/*.properties</include>
	            <include>**/*.xml</include>
	            <include>**/*.yml</include>
	        </includes>
	        <filtering>true</filtering>
	    </resource>
	    <resource>
	        <directory>src/main/java</directory>
	        <includes>
	            <include>**/*.properties</include>
	            <include>**/*.xml</include>
	            <include>**/*.yml</include>
	        </includes>
	        <filtering>true</filtering>
	    </resource>
	</resources>
<build>

Después de la eliminación, no hay ningún archivo HTML en la carpeta de destino generada.

Sin la carpeta de plantillas y los archivos HTML en ella, el programa en ejecución no podrá acceder a la página HTML.

6.2 El archivo HTML se genera en el destino, pero la página HTML aún no se encuentra

Es posible que thymeleafla configuración sea incorrecta.

thymeleaf.prefixDebes escribirlo correctamente, y no puedes /escribir uno más ni uno menos /, porque de esta forma, cuando escribas la página de acceso, habrá más o menos uno en la ruta, y /no podrás encontrar la página HTML. .

6.3 El archivo pom maven-compiler-pluginu spring-boot-maven-pluginotros complementos no se pueden importar correctamente (se vuelve rojo)

Debe introducir estos complementos en las dependencias y luego introducir estos complementos en los complementos en la compilación.

Supongo que te gusta

Origin blog.csdn.net/qq_27198345/article/details/111319290
Recomendado
Clasificación