目录
- 报错背景
- 报错详情
- 报错剖析
- 解决办法
- 总结
报错背景
微服务中两个子工程相互依赖时,出现程序包不存在找不到目标类
报错详情
代码语言:javascript复制maven-compiler-plugin:3.8.1:compile (default-compile) @ gtw ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to /Users/cuizongbao/code/cloud-alibaba-demo/gtw/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/cuizongbao/code/cloud-alibaba-demo/gtw/src/main/java/com/cuizb/cloud/alibaba/gtw/controller/GtwServiceImpl.java:[3,39] 程序包com.cuizb.dubbo.demoservice.api不存在
[ERROR] /Users/cuizongbao/code/cloud-alibaba-demo/gtw/src/main/java/com/cuizb/cloud/alibaba/gtw/controller/GtwServiceImpl.java:[29,13] 找不到符号
符号: 类 DubboDemoService
位置: 类 com.cuizb.cloud.alibaba.gtw.controller.GtwServiceImpl
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
报错剖析
- 包路径是否正常
- pom.xml是否引入
- jar包是否冲突
结果发现都正常。
但是就是没有依赖。最后发现是spring-boot-maven-plugin
它的问题。
解决办法
spring-boot-maven-plugin
这个插件打包的Jar包可以直接运行,但是不可依赖。所以interface自始至终就没有依赖,自然会说找程序包不存在或者找不到类
修改pom.xml的maven插件配置
代码语言:javascript复制<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 解决没有main函数报错unable to find main class 的问题-->
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
<configuration>
<classifier>execute</classifier>
</configuration>
</plugin>
</plugins>
</build>
总结
一个微服务通常有两个子module,一般一个写实体类和接口一个写实现方法
- common类、实体类、被被依赖的类,打包插件配置为
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 解决没有main函数报错unable to find main class 的问题-->
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
<configuration>
<classifier>execute</classifier>
</configuration>
</plugin>
</plugins>
</build>
其他类或者微服务可以正常配置:
代码语言:javascript复制<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>