Spring Boot项目依赖引用报错:目标包不存在如何解决?
解决Spring Boot项目依赖找不到GeneratedClasses包的问题
核心原因
Spring Boot自带的spring-boot-maven-plugin默认会把项目打包成可执行的fat jar,这种jar的内部结构和普通依赖jar不一样,项目类会被放到BOOT-INF/classes目录下,其他项目依赖时无法直接识别这些类,这就是你遇到包不存在错误的关键原因。
分步解决方法
1. 调整IOP项目打包配置,生成可被依赖的普通jar
修改IOP项目的pom.xml,给spring-boot-maven-plugin添加配置,让它同时生成可执行jar和用于依赖的普通jar:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 生成带exec后缀的可执行jar,同时保留不带后缀的普通依赖jar --> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build>
配置完成后,在IOP项目下执行mvn clean install,会生成两个jar文件:一个带-exec后缀的可执行jar,一个不带后缀的普通jar(这个就是给ExternalAPI依赖用的)。
2. 确保GeneratedClasses被正确编译打包
如果GeneratedClasses是自动生成的代码,要确认maven编译阶段能识别到这个目录:
<build> <sources> <source>src/main/java</source> <!-- 把自动生成代码的目录加入编译源 --> <source>target/generated-sources/GeneratedClasses</source> </sources> </build>
之后可以打开IOP生成的普通jar,检查里面是否存在com/example/IOP/GeneratedClasses目录及对应的class文件。
3. 核对ExternalAPI的依赖配置
确保依赖的groupId、artifactId、版本号和IOP项目的pom.xml完全一致:
<dependency> <groupId>com.example</groupId> <artifactId>IOP</artifactId> <version>你的项目版本号</version> <!-- 这里不需要加classifier,因为我们依赖的是不带后缀的普通jar --> </dependency>
4. 清理缓存重新构建
- 删除本地maven仓库中IOP项目的缓存目录(一般路径是
~/.m2/repository/com/example/IOP) - 重新在IOP项目执行
mvn clean install - 最后在ExternalAPI项目执行
mvn clean install
额外检查点
- 确认包名拼写:错误提示里的
ExternalAPIControlers是不是多了一个s(正确应该是Controllers?),包名拼写错误也会导致找不到。 - 检查IOP项目的
packaging配置:如果是pom类型,要改成jar。
内容的提问来源于stack exchange,提问作者learningProgrammer
相关产品推荐
相关产品推荐

