Spring Boot项目Maven打包出现 找不到符号(cannot find symbol)问题解决方法

公司项目结构是这样的:

  project

    project-common

    project-modules

      project-modules-core

      project-modules-buss1 

      project-modules-buss2

      project-modules-buss3

      project-modules-bussN

    project-web

    project-api

在用maven打包时,出现了“找不到符号”错误,英文对应的是cannot find symbol,然而你直接在开发工具(Eclipse/IDEA)中运行是没有错误出现的,问题单从表面分析的话,大概意思就是说你的项目依赖出现了问题,但实际你重新整理各项目依赖关系之后,错误依然存在。

当然,本文仅解决的是在打包Spring Boot项目而出现上述错误,其它类型项目可参考,但不保证可以解决。

基本情况:

  1、项目依赖没有问题

  2、JDK版本及项目编码没有不一致的情况

  3、仅mvn package的时候才出现,mvn compile则不出现

问题分析:

  1、排除以上1和2点

  2、编译不出问题而打包或install到本地会出错,而install的时候也会打包,那可以肯定的是问题出在了打包上

  如果不懂Spring Boot repackage规则的会很懵B,在此解释一下,通俗来讲就是如果项目指定了某个模块为最终的可执行工程(含main方法的Spring Boot项目),那么该模块会触发repackage规则,就会将所有关联的模块打包到该模块的jar文件中。

  那么,repackage属于spring-boot-maven-plugin插件中的命令,如果将spring-boot-maven-plugin配置了根项目的pom.xml中或配置到非最终可执行工程(含main方法的Spring Boot项目),会出现什么现象呢?

  1、出现如上述所说的“找不到符号”(cannot find symbol)

  2、Unable to find main class

  如上两个现象基本上就是你的spring-boot-maven-plugin放错了pom,不要怀疑,这是项目由单体拆分模块时经常出现的情况,也是项目架构不规范的一种表现。

解决办法:

  将spring-boot-maven-plugin放置到正确的pom中

延伸:试想,如果整个项目中都不配置spring-boot-maven-plugin会怎样呢?当然也是不可以的啦,除非你的项目都只是打包用的,没有Spring Boot的启动类(那么这样的项目为何要使用Spring Boot?),如果不配置,那么执行mvn package之后,项目的编译路径中生成的jar文件,都是比较小的,里面仅是当前项目的代码,不包含任何依赖(仅仅是将mvn compile之后的class文件打包成了jar)。

猜你喜欢

转载自www.cnblogs.com/dongyushuai/p/9185199.html