Erro ‘cannot find symbol’ em projeto Maven multi-module devido a configuração do Spring Boot Maven Plugin em módulos como biblioteca
Em um projeto Maven multi-módulo, o módulo “commons”, que contém apenas DTOs (Data Transfer Objects) comuns entre microsserviços, estava sendo importado pelo módulo “core”. No entanto, durante a compilação, ocorria o erro “cannot find symbol”, apesar do IntelliJ reconhecer corretamente os imports do módulo “commons” durante o desenvolvimento.
Causa do Problema
O erro estava relacionado à configuração do spring-boot-maven-plugin
no pom.xml
do módulo “commons”. Esse plugin, por padrão, empacota o projeto como um JAR executável (fat jar), o que não é apropriado para uma biblioteca que deve ser usada como dependência em outros módulos. Isso gerava incompatibilidades no processo de build.
Solução
Para resolver o problema, foi necessário ajustar o spring-boot-maven-plugin
no pom.xml
do módulo “commons” para evitar a criação de um JAR executável. A solução envolveu a seguinte configuração:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<attach>false</attach>
</configuration>
</execution>
</executions>
</plugin>
Essa configuração instrui o Maven a empacotar apenas o JAR original, sem criar um JAR executável.
Além disso, o spring-boot-maven-plugin
foi removido do pom.xml
do módulo “commons”, pois não é necessário para projetos de bibliotecas.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
O problema estava na configuração incorreta do build no módulo “commons”, que gerava um JAR executável em vez de uma biblioteca. Após ajustar o spring-boot-maven-plugin
, o erro foi resolvido, e o módulo “core” pôde usar corretamente as classes do “commons” durante a compilação.