Le processus d'empaquetage du projet SpringBoot dans un package jar / package war (basé sur Maven)


Une fois le projet SpringBoot développé, il doit être emballé dans un package jar / package war, puis déployé et exécuté pour terminer le processus de l'ensemble du projet.

1. Dans le fichier 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 maven-compiler-plugin

maven-compiler-pluginVous pouvez spécifier la version du JDK dans le projet et la version du fichier de classe généré par la compilation spécifiée. Dans mon exemple, j'ai spécifié que JDK11 était utilisé dans le code source pendant le développement, et le fichier de classe généré correspond également à JDK11.

1.2 Spring-Boot-Maven-Plugin

spring-boot-maven-pluginPlug-ins fournis avec Maven. repackageReconditionnez l'application. Par défaut, les deux objectifs principaux de reconditionnement et d'exécution incluront toutes les dépendances définies dans le projet.

Certaines dépendances doivent être exclues du package jar exécutable. Il existe trois façons d'exclure des modules dépendants pendant l'exécution du package:

1.2.1 Exclure un module maven spécifique

L'exclusion d'un module maven spécifique est obtenue grâce à une combinaison unique de groupId et artifactId. (Si nécessaire, vous pouvez ajouter un classificateur pour confirmer de manière unique.)

<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>

Excluez le module de barre sous com.foo.

1.2.2 Exclure tous les modules maven qui correspondent à l '"artifactId spécifié"

Excluez tous les modules maven qui correspondent à l '"artifactId spécifié".

<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>

Exclus artifactIdest -à my-lib, another-libtous les modules, à savoir l' ensemble groupIdinférieur artifactIdpour le my-lib, another-libmodule.

1.2.3 Exclure tous les modules maven appartenant au "groupId spécifié"

<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>

Exclus groupIdcomme com.footous les modules.

2. Nom du package Jar

<finalName>Your jar Package Name</finalName>

La construction fileNamespécifie le nom du package jar généré par l'empaquetage.

3. Emballage Maven

Exécutez les commandes suivantes dans le répertoire racine du projet SpringBoot:

mvn package spring-boot:repackage

Vous pouvez générer le dossier cible dans le répertoire racine, qui contient xxx.jar.

4. Exécutez le package jar

4.1 Console exécutant le package jar

java -jar xxx.jar

4.2 Exécutez le package jar en arrière-plan, la fermeture du terminal n'affecte pas l'exécution du package jar

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

Le package jar s'exécute en arrière-plan, les informations du journal sont entrées dans le fichier msg.log et le journal des erreurs et le journal correct sont entrés dans le msg.log.
L'ajout d'une esperluette à la fin de la commande signifie que le processus sera exécuté en arrière-plan, de sorte qu'il reviendra immédiatement à l'état d'invite, et nous pouvons continuer à faire ce qui suit.

4.3 Exécutez le package jar en arrière-plan et entrez le journal correct et le mauvais journal dans différents fichiers

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

Le journal correct est entré dans msg1.log et le mauvais journal est entré dans msg2.log.

5. Emballez et générez un package de guerre

Le package jar est généré par défaut. Spécifiez la forme de package à générer dans le fichier pom

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

Exécuter des commandes d'empaquetage

mvn package spring-boot:repackage

Insérez la description de l'image ici
Vous pouvez voir que le package war est généré et que le package war est déployé pour exécuter le programme.

6. Erreurs rencontrées et précautions

6.1 La page correspondante est introuvable lors de l'accès à la page HTML

Dans ce cas, nous devons d'abord vérifier s'il existe un dossier de modèles correspondant sous le dossier cible généré et le fichier xxx.html qui devrait y être contenu. Lorsque le programme est en cours d'exécution, il ne reconnaît que les éléments du dossier cible. S'il n'y a pas de dossier de modèles correspondant et de fichier xxx.html sous le dossier cible, il est définitivement impossible d'ouvrir la page HTML.

La cause courante de cette erreur est que xxx.html n'est pas spécifié comme ressource du projet à empaqueter. Cela doit être spécifié dans le fichier 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>

Comme ci-dessus, spécifiez le fichier .properties, le fichier .xml, le fichier .yml, le fichier .html sous le dossier src / main / resources et le fichier .properties, le fichier .xml, .yml sous le dossier src / main / java Le fichier est utilisé comme fichier de ressources du projet, de sorte que le fichier html se trouve dans le fichier cible généré.

Si vous supprimez l'indication du fichier .html, le fichier HTML correspondant est introuvable dans le dossier cible généré et la page HTML ne peut pas être ouverte.

<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>

Après la suppression, il n'y a pas de fichier HTML dans le dossier cible généré.

Sans le dossier de modèles et les fichiers HTML qu'il contient, le programme en cours d'exécution ne pourra pas accéder à la page HTML.

6.2 Le fichier HTML est généré dans la cible, mais la page HTML n'est toujours pas trouvée

Il est possible que thymeleafla configuration soit erronée.

thymeleaf.prefixVous devez l'écrire correctement, et vous ne pouvez pas en /écrire un plus ou un de moins /, car de cette façon, lorsque vous écrivez la page d'accès, il y en aura plus ou moins un dans le chemin, et vous /ne pourrez pas trouver la page HTML .

6.3 Le fichier pom maven-compiler-pluginou d' spring-boot-maven-pluginautres plug-ins ne peuvent pas être importés correctement (devient rouge)

Vous devez introduire ces plug-ins dans les dépendances, puis introduire ces plug-ins dans les plugins de la construction.

Je suppose que tu aimes

Origine blog.csdn.net/qq_27198345/article/details/111319290
conseillé
Classement