O processo de empacotar o projeto SpringBoot em um pacote jar / pacote war (baseado em Maven)


Depois que o projeto SpringBoot é desenvolvido, ele precisa ser empacotado em um pacote jar / pacote war, e implantado e executado para completar o processo de todo o projeto.

1. No arquivo 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-pluginVocê pode especificar a versão do JDK no projeto e a versão do arquivo de classe gerado pela compilação especificada. No meu exemplo, especifiquei que JDK11 foi usado no código-fonte durante o desenvolvimento e o arquivo de classe gerado também corresponde a JDK11.

1.2 spring-boot-maven-plugin

spring-boot-maven-pluginPlug-ins empacotados usando Maven. repackageReempacote o aplicativo. Por padrão, os dois objetivos do maven de reembalagem e execução incluirão todas as dependências definidas no projeto.

Algumas dependências devem ser excluídas do pacote executável do jar. Existem três maneiras de excluir módulos dependentes enquanto o pacote está em execução:

1.2.1 Excluir um módulo maven específico

A exclusão de um módulo maven específico é obtida por meio de uma combinação única de groupId e artifactId. (Se necessário, você pode adicionar um classificador para confirmar exclusivamente.)

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

Exclua o módulo da barra em com.foo.

1.2.2 Excluir todos os módulos maven que correspondem ao "artifactId especificado"

Excluir todos os módulos maven que correspondem ao "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>

Excluídos artifactIdseja my-lib, another-libtodos os módulos, isto é, tudo groupIdinferior artifactIdpara o my-lib, another-libmódulo.

1.2.3 Excluir todos os módulos maven pertencentes ao "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>

Excluído groupIdcomo com.footodos os módulos.

2. Nome do pacote Jar

<finalName>Your jar Package Name</finalName>

A construção fileNameespecifica o nome do pacote jar gerado pela embalagem.

3. Embalagem Maven

Execute os seguintes comandos no diretório raiz do projeto SpringBoot:

mvn package spring-boot:repackage

Você pode gerar a pasta de destino no diretório raiz, que contém xxx.jar.

4. Execute o pacote jar

4.1 Pacote jar do console em execução

java -jar xxx.jar

4.2 Execute o pacote jar em segundo plano, fechando o terminal não afeta o funcionamento do pacote jar

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

O pacote jar é executado em segundo plano, as informações de log são inseridas no arquivo msg.log e o log de erros e o log correto são inseridos no msg.log.
Adicionar um E comercial ao final do comando significa que o processo será executado em segundo plano, de modo que retornará imediatamente ao estado de prompt e podemos continuar a fazer o seguinte.

4.3 Execute o pacote jar em segundo plano e insira o log correto e o log incorreto em arquivos diferentes

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

O log correto é inserido em msg1.log, e o log incorreto é inserido em msg2.log.

5. Empacote e gere um pacote de guerra

O pacote jar é gerado por padrão. Especifique qual forma de pacote deve ser gerada no arquivo pom

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

Execute comandos de empacotamento

mvn package spring-boot:repackage

Insira a descrição da imagem aqui
Você pode ver que o pacote war é gerado e o pacote war é implantado para executar o programa.

6. Erros encontrados e precauções

6.1 A página correspondente não pode ser encontrada ao acessar a página HTML

Nesse caso, devemos primeiro verificar se há uma pasta de modelos correspondente na pasta de destino gerada e o arquivo xxx.html que deve estar contido nela. Quando o programa está em execução, ele reconhece apenas as coisas na pasta de destino.Se não houver uma pasta de modelos correspondente e arquivo xxx.html na pasta de destino, é definitivamente impossível abrir a página HTML.

A causa comum desse erro é que xxx.html não é especificado como o recurso do projeto a ser empacotado.Isso precisa ser especificado no arquivo 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 acima, especifique o arquivo .properties, arquivo .xml, arquivo .yml, arquivo .html na pasta src / main / resources e o arquivo .properties, arquivo .xml, .yml na pasta src / main / java O arquivo é usado como o arquivo de recurso do projeto, portanto, o arquivo html pode ser encontrado no arquivo de destino gerado.

Se você remover a indicação do arquivo .html, o arquivo HTML correspondente não poderá ser encontrado na pasta de destino gerada e a página HTML não poderá ser aberta.

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

Após a remoção, não há nenhum arquivo HTML na pasta de destino

gerada.Sem a pasta de modelos e os arquivos HTML nela, o programa em execução não será capaz de acessar a página HTML.

6.2 O arquivo HTML é gerado no destino, mas a página HTML ainda não foi encontrada

É possível que thymeleafa configuração esteja errada.

thymeleaf.prefixVocê deve escrevê-lo corretamente, e você não pode /escrever um a mais ou a menos /, porque desta forma, ao escrever a página de acesso, haverá mais ou menos um no caminho, e você /não conseguirá encontrar a página HTML .

6.3 O arquivo pom maven-compiler-pluginou spring-boot-maven-pluginoutros plug-ins não podem ser importados corretamente (fica vermelho)

Você precisa introduzir esses plug-ins nas dependências e, em seguida, introduzir esses plug-ins nos plug-ins na construção.

Acho que você gosta

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