Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Não consigo empacotar o JAR de serviço de e-mail corretamente

Olá! Segui os passos do curso e tudo funcionou corretamente a princípio: criei o projeto de serviço de e-mail, instalei ele no meu repositório local (mvn install), declarei a dependência no projeto web e testei. Tudo funcionou em um primeiro momento.

Porém, ao fechar o projeto de e-mail na minha workspace, o projeto web parou de compilar. Enquanto o eclipse estava lendo do projeto diretamente da workspace estava tudo bem, ao fechá-lo (ou removê-lo) parou.

Observações sobre o problema:

1 - Ao fechar/remover o projeto de serviço de e-mail, o JAR continuou aparecendo no meu projeto ListaVIP normalmente (agora como uma lib, e não mais com aquele ícone de pastinha de referência a outro projeto da workspace).

2 - O jar está na minha pasta .m2

3 - Ao tentar navegar dentro do Jar com o 7-Zip eu não encontrei as minhas classes compiladas, assim como não as vejo se expandir o JAR no próprio Eclipse.

O que pode estar acontecendo?

Segue o pom.xml do meu projeto de serviço de e-mail (acredito que seja algum problema de empacotamento).

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>br.com.alura.enviadordeemail</groupId>
    <artifactId>enviadordeemail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>enviadordeemail</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Dependência que utilizada para envio de e-mail. Não utilizada pois aqui o serviço de e-mail faz apenas um SYSOUT -->
        <!-- 
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.4</version>
        </dependency>
        -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
8 respostas

Fala Denis,

Você consegue subir seu projeto no gitgub pra eu baixar ele local aqui? Vlw

Tá na mão Otávio: https://github.com/dfklein/aluraSpringBoot

O problema que você está tendo é esse aqui?

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.553 s
[INFO] Finished at: 2019-01-30T15:47:14-02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project listavip: Compilation failure
[ERROR] /home/otaviofp/Downloads/aluraSpringBoot-master/listavip/src/main/java/br/com/alura/listavip/service/ConvidadosService.java:[25,61] package br.com.alura.enviadordeemail.enviadordeemail does not exist

Este é o erro que ele dá se eu der um mvn compile em linha de comando.

Se eu fechar ou excluir o projeto no eclipse ele vai dizer que a classe "cannot be resolved to a type"

Opa Denis, tudo bem?

Acho que ele nao encontra a dependência porque o spring-boot empacota o jar com suas classes dentro de uma pasta específica pra ele ler.

Tem algum motivo específico de porque você precisa fechar/remover o projeto do Eclipse? Acho que se o outro projeto for um projeto Spring Boot não rola mesmo.

Abraço!

Olá!

Então, não é uma questão de que eu PRECISO fazer isso: a aula é sobre como criar uma lib standalone com Spring Boot, o que me leva a entender que estou gerando um Jar que pode ser utilizado em qualquer outro projeto.

Em um cenário real eu não posso depender de rodar a minha aplicação no Eclipse para ela funcionar. Se é isso mesmo, esta aula não faz muito sentido para mim.

O instrutor não faz isso na aula, mas eu acho que é um teste bastante razoável de se fazer considerando a proposta dela.

solução!

Oi Denis!

Você tem razão. Detalhe que deixei passar. Fui atrás e dá pra fazer o seguinte neste cenário: o que faz com que o jar gerado seja modificado é o plugin do spring boot. Então no enviador de e-mail você pode remover este plugin:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Depois tem que dar um mvn install no projeto, pra ele copiar o jar pro repositório local do maven.

Uma outra coisa que terá que ser feita é remover o runtime da dependência, já que precisa dela pra compilar:

        <dependency>
            <groupId>br.com.alura.enviadordeemail</groupId>
            <artifactId>enviadordeemail</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>runtime</scope>
        </dependency>

Abraço!

Eu não precisei remover o runtime aqui. Deu tudo certinho! Só não vi muita vantagem em criar a lib com o Spring Boot, mas tá bom! Obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software