问题描述

在使用 maven 打包时报错,提示:java: 找不到符号  和  java: 程序包 xxx 不存在。而实际上,错误提示中的依赖包已正确添加,清楚缓存、重新导入等方法均已尝试且无效。

分析与解决

1. 子项目被依赖但后编译

分析

聚合项目中的子项目之间存在依赖,(假设 A 依赖 B)但是被依赖项 B 在父项目中的位置排在 A 后面,导致编译时先打包 A,而使得 A 无法加载 B 的依赖。

解决

调整各个模块在父项目(pom 添加 module)中的位置,将最底层的放置在最上面。

2. 编译插件为生成可依赖包

分析

在多模块项目打包时父模块的 pom.xml 文件中配置了  spring-boot-maven-plugin  插件。
该插件会将 Spring 项目打包成可运行的 jar 或 war 程序,而可运行程序无法被用作依赖,因此出现找不到符号或程序包不存在问题。

解决

1. 取消在 pom.xml 中的配置

直接去除掉父模块的 pom.xml 中配置的 spring-boot-maven-plugin 插件,使用 Idea 中 maven 插件即可进行打包。
缺点是无法在 pom.xml 中统一打包配置。

2. 修改插件配置

在插件中指定配置  <classifier>exec</classifier>,如此可以同时生成可依赖包和可执行程序。

1
2
3
4
5
6
7
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
3. 更换插件

不使用  spring-boot-maven-plugin,替换为  maven-compiler-plugin 插件。

1
2
3
4
5
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>

评论