Uma das coisas mais incovenientes para iniciantes em Maven é ao gerar um .jar da aplicação as dependências não serem incluídas no .jar final ou o .jar não inicializar a execução. Entretanto algumas configurações bem simples podem resolver esse problema e incluir as dependências corretamente. Aproveitamos o projeto do post anterior e adicionamos o trecho que código abaixo.
<!-- CONFIGURAÇÕES DE BUILD RESPONSÁVEIS POR INCLUIR AS DEPENDÊNCIAS NO .JAR FINAL --> <build> <plugins> <!-- DEFINE O PLUGIN MAVEN RESPONSÁVEL POR COMPILAR O PROJETO SUA VERSÃO E O JDK UTILIZADO --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <!-- DEFINE AS CONFIGURAÇÕES DO MAVEN ASSEMBLER --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <!-- DEFINE QUAL É A CLASSE MAIN DA APLICAÇÃO --> <manifest> <addClasspath>true</addClasspath> <mainClass>br.com.semeru.datesynchronizer.RecoveryDateWitchURL</mainClass> </manifest> </archive> <!-- ADICIONO AO NOME DO JAR FINAL UM COMPLEMENTO DIZENDO QUE ELE CONTÉM AS DEPENDÊNCIAS --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <!-- DETERMINO QUE O JAR GERADO INCLUIRÁ AS DEPENDÊNCIAS E ELAS SERÃO EMPACOTADAS JUNTO COM O PROJETO EM UM ÚNICO JAR --> <id>make-my-jar-with-dependencies</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Após executarmos a build veremos algo similar a imagem abaixo, são criados dois .jars um com e outro sem as dependências. Esse jar pode ser startado por duplo clique, pelo DOS ou pelo Shell do GNU/Linux.
Além disso se abrirmos o jar com uma ferramenta como o winrar veremos que além das classes no nosso projeto, assinalados em vermelho, temos também outros diretórios, assinalados em azul, contendo as dependências e as classes compiladas das mesmas como podemos observar nos pontos indicados pelas setas.
Se você tem alguma dúvida relacionada ao conteúdo desse post sinta-se a vontade de comentar, criticar e/ou contribuir com o seu comentário. Além disso você pode acessar todo o código fonte desse projeto através do GitHub.
#1 por Bruno em 15 de dezembro de 2016 - 9:39
Citar
Olá Leandro, muito bom o tutorial, estou precisando disso, preciso gerar um .jar com toda a aplicação + o tomcat pelo maven, como ficaria?
É possível de alguma maneira incluir o banco?
#2 por Leandro da Costa Gonçalves em 1 de janeiro de 2017 - 16:52
Citar
Pra fazer isso o melhor seria usar o Spring Boot que lhe permite criar um .jar da sua aplicação com o Jetty ou o Tomcat embutido que é a opção padrão. Ou um .war que poder ser implantado como qualquer arquivo .war. Se você não conhece o Spring Boot pode dar uma fuçada aqui no blog por que tem diversos posts a respeito.
#3 por jefeson em 2 de outubro de 2017 - 20:55
Citar
Qual comando você utilizou para montar ele no maven?(install, package, assembly?)
#4 por Leandro da Costa Gonçalves em 28 de outubro de 2017 - 15:41
Citar
mvn clean install só olhar a pasta target que o jar estará lá.
#5 por Robson em 12 de abril de 2018 - 14:05
Citar
o meu gera o seguinte erro :
Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.5:resources (default-resources) on project monitor: Cannot create resource output directory
#6 por Leandro da Costa Gonçalves em 24 de abril de 2018 - 11:20
Citar
Olá Robson bem vindo ao blog. Esse post foi feito a 5 anos hehehe. Minha dica é conferir se você tem permissão de escrita nesse diretório se tiver então confira sua versão do Java e do Maven. Confira se nada mudou do Java 6 e Maven 3 (acho que usei essas versões para esse post) e as versões que você está usando atualmente possivelmente você precisará adaptar à sua realidade. Qualquer coisa comente aqui novamente.