- 由于博主最近两个月业余时间都在写一个前后台前后端的在线教育项目,很久都没有更博。今天就和大家分享一下我踩的坑。
- 如下图,是后端微服务工程
- 先将common_utils打为Jar包,方便后面模块引用
- 出现“BUILD SUCCESS”表示jar打好
- 接下来将“service_base”微服务模块打为jar包,由于“service_base”和“common_utils”都在同一个父工程“common”,所以“service_base”的pom中没有“common_utils”依赖。maven打包如下图
- “service_base”打Jar包报错如下
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[4,31] 程序包com.atguigu.commonutils不存在
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[22,12] 找不到符号
符号: 类 R
位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[29,12] 找不到符号
符号: 类 R
位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[37,12] 找不到符号
符号: 类 R
位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.860 s
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project service_base: Compilation failure: Compilation failure:
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[4,31] 程序包com.atguigu.commonutils不存在
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[22,12] 找不到符号
[ERROR] 符号: 类 R
[ERROR] 位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[29,12] 找不到符号
[ERROR] 符号: 类 R
[ERROR] 位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[ERROR] /E:/study/Internet_Java/atguigu/project/guli_parent/common/service_base/src/main/java/com/atguigu/servicebase/exceptionhandler/GlobalExceptionHandler.java:[37,12] 找不到符号
[ERROR] 符号: 类 R
[ERROR] 位置: 类 com.atguigu.servicebase.exceptionhandler.GlobalExceptionHandler
[ERROR] -> [Help 1]
- 顿时我就懵逼了,我在本地编译运行就可以一旦打包就有问题。我查了很多资料都没有找原因。气得我茶不思饭不想,三天三夜都没有吃饭。但我我就觉得我要和这个报错死磕。在第四天终于解决了。原因如下:
- springboot工程打包编译时,会生成两种jar包,一种是普通的jar包,另一种时可执行jar包,默认情况下两个jar的名称相同,因此在不做额外配置的情况下
- 普通的jar先生成,可执行jar后生成,这种情况下可执行jar会覆盖普通jar,而我要引用的就是普通jar,所以打包时会报错。
- 解决方式在需要引用Jar包pom文件中的Maven打包插件如下书写,重点是 configuration里面的配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build> - 在“common_utils”的pom文件中加入了build配置,在“service_base” 中打Jar包又有报错,如下
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.1.RELEASE:repackage (repackage) on project service_base: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.2.1.RELEASE:repackage failed: Unable to find main class -> [Help 1]
-
经过查阅资料后原因如下
- 参考官网描述,没有指定或者继承了spring-boot-starter-parent并且属性未配置时,会自动寻找签名是public static void main(String[] args)的方法... 所以插件懵逼了
- 参考资料:www.cnblogs.com/thinking-be…
-
因此在“service_base”中加入pom配置为
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> <skip>true</skip> </configuration> </plugin> </plugins> </build>- Maven打Jar结果如下图
*** 总结***
- Maven打Jar结果如下图
-
遇到问题要勤于查资料,勤于思劳
-
解决问题要有韧性,要有和问题死磕精神,这样技术才有成长