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.