Maven无法使用本地.m2仓库Snapshot依赖的问题求助
解决Spring Boot本地Snapshot依赖无法导入类的问题
核心原因
Spring Boot默认的spring-boot-maven-plugin打包生成的是可执行Jar,类文件被放在BOOT-INF/classes目录下,普通Maven依赖无法直接读取这个路径下的类,这是导致Service2找不到Service1中util包的主要原因。
具体解决步骤
1. 调整Service1的Maven打包配置
修改Service1的pom.xml,让Maven同时生成可执行Jar(用于运行Service1)和普通Jar(用于被其他服务依赖):
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定classifier,生成的普通Jar会命名为service-1-0.0.1-SNAPSHOT.jar,可执行Jar为service-1-0.0.1-SNAPSHOT-exec.jar --> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build>
如果Service1只是工具模块(不需要独立运行),可以直接移除Spring Boot的打包插件,改为普通Maven模块打包。
2. 重新发布Service1到本地Maven仓库
在Service1的项目根目录执行命令:
mvn clean install
执行完成后,检查本地.m2仓库中com/example/service-1/0.0.1-SNAPSHOT目录下是否生成了对应Jar文件,解压Jar确认com/example/util/UtilClass.class文件直接位于Jar根目录下(而非BOOT-INF/classes内)。
3. 修正Service2的依赖配置
确保Service2的pom.xml中依赖配置与Service1的坐标完全一致:
<dependency> <groupId>com.example</groupId> <artifactId>service-1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
4. 刷新IntelliJ的依赖与缓存
- 点击右侧Maven面板的刷新图标,让IntelliJ重新加载依赖;
- 执行
mvn clean compile命令,触发Maven编译; - 若仍有问题,执行
File -> Invalidate Caches... -> Invalidate and Restart清除IntelliJ缓存并重启。
5. 检查类的访问权限
确认Service1中的UtilClass.java是public修饰的:
package com.example.util; public class UtilClass { // 类内容 }
默认包访问权限(无public)的类无法被其他模块访问。
内容的提问来源于stack exchange,提问作者Seeker
相关产品推荐
相关产品推荐

