IntelliJ中Spring Boot项目依赖报错:package不存在
问题分析与解决方案
核心问题
Spring Boot项目默认打包生成的是可执行JAR,这种JAR的类文件都存放在BOOT-INF/classes目录下,而普通Maven项目依赖时,编译器默认只会读取JAR根目录下的类文件,因此无法识别到项目A中的类,这就是编译报错“package ? does not exist”的根本原因。
解决方案
方案1:修改项目A的打包配置,生成可被依赖的普通JAR
在项目A的pom.xml中配置Spring Boot Maven插件,添加classifier参数,打包时会同时生成可执行JAR和普通依赖JAR:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 给可执行JAR添加后缀,比如exec,此时普通依赖JAR会使用默认文件名 --> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build>
执行mvn clean install重新打包安装项目A到本地仓库,然后在项目B的依赖中直接引用默认文件名的JAR即可(可执行JAR会带-exec后缀,无需依赖)。
方案2:在项目B中配置解压项目A的JAR内容
如果无法修改项目A的配置,可在项目B的pom.xml中使用Maven依赖插件,将项目A JAR中BOOT-INF/classes下的类文件解压到项目B的编译目录:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-project-a</id> <phase>compile</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <!-- 替换为项目A的实际groupId、artifactId、version --> <groupId>com.example</groupId> <artifactId>project-a</artifactId> <version>0.0.1-SNAPSHOT</version> <outputDirectory>${project.build.directory}/classes</outputDirectory> <includes>BOOT-INF/classes/**/*</includes> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行mvn compile时,插件会自动解压项目A的类文件到项目B的编译路径,编译器即可识别。
方案3:清理IntelliJ缓存并重新导入Maven项目
- 点击
File -> Invalidate Caches...,选择Invalidate and Restart,清除IntelliJ的本地缓存。 - 重启后,打开Maven工具窗口(
View -> Tool Windows -> Maven),点击左上角的刷新按钮重新导入项目依赖。
内容的提问来源于stack exchange,提问作者emiles
相关产品推荐
相关产品推荐

