Maven是否解析依赖的依赖?项目依赖传递异常求助
问题本质
Maven确实支持依赖传递,但你的场景里存在关键操作失误:Project1不是通过Maven坐标依赖Project2,而是直接在IntelliJ IDEA中导入了Project2的.jar文件。这种情况下,Maven无法读取Project2的pom.xml配置,自然不会自动引入其传递依赖(比如spring-boot-starter-web-services)。
报错原因
当你直接导入裸jar文件时,Maven仅将该jar本身视为Project1的依赖,不会去解析该jar对应的pom依赖项——因为本地导入的jar没有附带Maven能识别的依赖元数据。所以即使Project2的pom里声明了spring-boot-starter-web-services,Maven也无从知晓,编译时就会找不到org.springframework.ws.client.core.support.WebServiceGatewaySupport类。
正确解决方案
方案1:改用Maven本地仓库依赖(推荐)
- 进入Project2根目录,执行命令:
mvn clean install
这会把Project2打包并安装到本地Maven仓库(默认路径为~/.m2/repository)。
2. 在Project1的pom.xml中,通过Maven坐标正常引入Project2:
<dependency> <groupId>你的项目GroupId</groupId> <artifactId>project2</artifactId> <version>对应版本号</version> </dependency>
此时Maven会自动解析Project2的pom,将其所有传递依赖(包括spring-boot-starter-web-services)一并引入Project1的构建环境。
方案2:手动添加传递依赖(不推荐)
如果暂时无法使用Maven仓库方式,只能在Project1的pom.xml中手动添加spring-boot-starter-web-services依赖,也就是你当前临时解决问题的方式。但这种方式维护成本高——一旦Project2的依赖版本更新,你需要手动同步到Project1。
总结
这是Maven的正常行为,不是bug。Maven的依赖传递仅针对通过Maven坐标(groupId/artifactId/version)引用的依赖,本地直接导入的jar文件不会触发依赖传递解析。
内容的提问来源于stack exchange,提问作者teamol

