Criar um aplicativo Fat Jar com Spring Boot

Criar um aplicativo Fat Jar com Spring Boot

1. Introdução

Um dos desenvolvimentos mais emocionantes dos últimos anos foi a simplificação contínua de como os aplicativos da web são implantados.

Ignorando todas as etapas históricas intermediárias chatas, chegamos hoje - quando podemos dispensar não apenas servlets pesados ​​e clichês XML, mas principalmente os próprios servidores.

Este artigo se concentrará emcreating a “fat jar” out of a Spring Boot application - basicamente para criar um único artefato que seja fácil de implantar e executar.

Boot fornece recursos para implantações sem contêiner imediatamente: tudo o que você precisa fazer é adicionar algumas configurações em seupom.xml:


    
        org.springframework.boot
        spring-boot-starter-web
        2.0.1.RELEASE
    



    
        org.springframework.boot
        spring-boot-maven-plugin
        2.0.1.RELEASE
    

2. Construir e executar

Com esta configuração, podemos agora simplesmente construir o projeto com omvn clean install padrão - nada incomum aqui.

E o executamos com o seguinte comando:java -jar <artifact-name> - muito simples e intuitivo.

O gerenciamento adequado de processos está além do escopo deste artigo, mas uma maneira simples de manter o processo em execução mesmo quando você faz logoff do servidor é usar o comandonohup:nohup java -jar <artifact-name>.

Parar projetosspring-boot também não é diferente de parar um processo regular, seja você simplesmentecntrl+c oukill <pid>.

3. Fat Jar / Fat War

Nos bastidores,spring-boot empacota todas as dependências do projeto dentro do artefato final junto com as classes secundárias do projeto (daí o jar “fat”). Um servidor Tomcat incorporado também está embutido.

E assim, o artefato resultante é completamente independente, fácil de implementar usando ferramentas Unix padrão (scp, sftp ... etc) e pode ser executado em qualquer servidor com uma JVM.

Por padrão, o Boot cria um arquivojar - mas se mudarmos a propriedadepackaging empom.xml parawar, o Maven irá naturalmentebuild a war.

Obviamente, isso será executável como autônomo e implantado em um contêiner da web.

4. Configuração adicional

Na maioria das vezes, nenhuma configuração adicional é necessária, tudo “simplesmente funciona”, mas em alguns casos específicos, você pode precisar dizer aspring-boot explicitamente qual é a classe principal. Uma maneira de fazer isso seria adicionar uma propriedade:


    org.example.boot.Application

Caso você estejanot herdando spring-boot-starter-parent, você precisará fazer isso no plug-in maven:


    org.springframework.boot
    spring-boot-maven-plugin
    2.0.1.RELEASE
    
        org.example.boot.Application
        ZIP
    

Outra coisa que você pode precisar fazer em alguns casos raros é instruir o maven aunpack algumas dependências:


    org.springframework.boot
    spring-boot-maven-plugin
    
        
            
                org.jruby
                jruby-complete
            
        
    

5. Conclusão

Neste artigo, vimos a implantação sem servidor usando jars “gordinhos” criados porspring-boot.

Como sempre, o código neste writeup está disponívelover on Github.