2
respostas

[Bug] Maven não encontra libs Junit/Mockito

Olá pessoal!

Estou trabalhando num projeto para treinar a prática, recentemente criei alguns testes automatizados, até aí tudo bem, todos os testes passam e a aplicação está funcional. O problema que encontrei foi na hora do build com o Maven. Quando eu tento executar um build, install, test... Recebo uma pilha de erros do Maven. Pelos erros dá pra ver que o problema é que o Maven não conseguiu encontrar as dependências das anotações do Junit e do Mockito, todos os erros são em cima dessas anotações. No pom.xml, nas dependências do Junit e do Mockito, se remover a tag <scope>test</scope> tudo vai funcionar normalmente. Eu entendi que o escopo limitado a testes limite essas libs somente a testes... Mas por que o Maven não consegue acessa-las? Pois Já fiz testes em outros projetos e não tive esse problema.

Um trecho resumido dos erros:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.025 s
[INFO] Finished at: 2023-11-22T16:47:15-03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project gerenciador: Compilation failure: Compilation failure:
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/UsuarioServiceTest.java:[3,26] package org.mockito does not exist
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/UsuarioServiceTest.java:[3,1] static import only from classes and interfaces
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/UsuarioServiceTest.java:[5,29] package org.junit.jupiter.api does not exist
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/UsuarioServiceTest.java:[15,33] package org.mockito.junit.jupiter does not exist
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/UsuarioServiceTest.java:[25,2] cannot find symbol
[ERROR]   symbol: class ExtendWith
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/EmpresaServiceTest.java:[152,10] cannot find symbol
[ERROR]   symbol:   class DisplayName
[ERROR] /E:/Projetos Eclipse/Servlet/git/gerenciador/src/test/java/br/com/alura/gerenciador/service/EmpresaServiceTest.java:[131,10] cannot find symbol
[ERROR]   symbol:   class Test
[ERROR]   location: class br.com.alura.gerenciador.service.EmpresaServiceTest

[ERROR]   location: class br.com.alura.gerenciador.service.EmpresaServiceTest
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
2 respostas

pom.xml:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.com.alura.gerenciador</groupId>
  <artifactId>gerenciador</artifactId>
  <version>3.1</version>
  <packaging>war</packaging>
  
  <properties>
      <java.version>17</java.version>
  </properties>
  
      <dependencies>
          
        <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <optional>true</optional>
              <version>1.18.28</version>
        </dependency>
          
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core-jakarta</artifactId>
            <version>5.6.15.Final</version>
        </dependency>
        
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>
    
        <dependency>
            <groupId>at.favre.lib</groupId>
            <artifactId>bcrypt</artifactId>
            <version>0.10.2</version>
        </dependency>
        
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        
        <dependency>
        	<groupId>jakarta.transaction</groupId>
        	<artifactId>jakarta.transaction-api</artifactId>
        	<version>2.0.1</version>
        </dependency>
        
        <dependency>
            <groupId>jakarta.servlet.jsp</groupId>
            <artifactId>jakarta.servlet.jsp-api</artifactId>
            <version>3.1.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>jakarta.servlet.jsp.jstl</groupId>
            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
            <version>3.0.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>3.0.1</version>
        </dependency>
        
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20231013</version>
        </dependency>
        
        <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
            <version>3.0.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>8.0.1.Final</version>
        </dependency>
        
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.glassfish.expressly</groupId>
            <artifactId>expressly</artifactId>
            <version>5.0.0</version>
        </dependency>
        
      </dependencies>
  
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <release>17</release>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Boa tarde, Mateus! Tudo bem?

Quando você remove o escopo de teste, o código compila normalmente, mas como você mencionou corretamente, não é uma prática recomendada levar dependências de teste para o ambiente de produção.

Aparentemente, o Maven não está conseguindo encontrar as classes relacionadas ao Mockito e JUnit durante a fase de compilação de testes.

Sugiro verificar as seguintes coisas:

  1. Versões Compatíveis: Verifique se as versões das dependências do Mockito e JUnit são compatíveis. Às vezes, certas versões de Mockito podem não ser totalmente compatíveis com as versões específicas do JUnit.

  2. Atualização do Projeto: Tente atualizar o projeto no seu ambiente de desenvolvimento (por exemplo, no Eclipse, você pode clicar com o botão direito no projeto e escolher "Maven" -> "Update Project").

  3. Limpeza do Cache do Maven: Às vezes, pode haver problemas de cache. Você pode tentar limpar o cache do Maven executando o comando abaixo no terminal:

    mvn clean install -U
    

    O -U força a atualização das dependências.

Se após verificar esses pontos o problema persistir, pode ser útil conferir a documentação do Maven para a versão específica que você está utilizando, pois algumas configurações podem ter mudado.

Além disso, notei que você está usando o Maven Compiler Plugin versão 3.11.0. Verifique se essa versão é compatível com as versões do Java, JUnit e Mockito que você está utilizando. Pode ser necessário ajustar as versões para garantir a compatibilidade.

Espero que essas sugestões ajudem a resolver o problema.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.