Gerando um .jar com as dependências em um projeto Maven

Spread the love

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.

MavenWithDependencies

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.

MavenWithDependencies2

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









Leandro

Sou desenvolvedor de software a desde 2008, além de programar gosto de esportes de aventura como rapel, tirolesa, trilhas de bike, apreciador de cervejas, baladas, motos e do bom e velho Rock’n Roll também gosto de história, ficção científica e de tecnologia. Atualmente sou consultor de Agile Software Delivery na Erudio Training e instrutor na Udemy.

4 thoughts to “Gerando um .jar com as dependências em um projeto Maven”

  1. 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?

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *