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
<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.
Treinamentos relacionados com este post









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?
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.
Qual comando você utilizou para montar ele no maven?(install, package, assembly?)
mvn clean install só olhar a pasta target que o jar estará lá.
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
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.
Quando eu tento rodar o jar com “java -jar …” encontro o seguinte erro: “Não foi possível localizar nem carregar a classe principal com.project.Application”
A única diferença no meu projeto é que uso o plugin
org.springframework.boot
spring-boot-maven-plugin
ao invés de
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.6
1.6
já que meu projeto é sping boot.
Como posso resolver esse problema?
Fala Gabriel beleza!
Nesse caso use o comando mvn clean package se quiser pular os testes use mvn clean package -DskipTests.
Grande abraço e sucesso!