Maven未下载依赖库POM中声明的传递依赖问题求助
可能原因
- 你的Spring Boot库用了
spring-boot-maven-plugin打包成可执行Jar:这种打包方式会把依赖嵌入Jar内部,但发布到本地仓库的pom.xml不会正确声明传递依赖,导致主项目无法识别这些依赖。 - 库中依赖的
scope设置错误:比如把jjwt这类依赖的scope设为provided、test或者optional,Maven默认不会将这些scope的依赖传递到主项目。 - 主项目的
pom.xml中主动排除了相关传递依赖:可能你在引入库的时候加了<exclusions>标签,无意中排除了jjwt这类依赖。 - 本地仓库中库的
pom.xml不完整:虽然你清理过本地仓库,但重新install库的时候可能出现异常,导致生成的pom.xml缺少传递依赖的声明。
解决方法
调整库的打包方式(关键)
如果你的库是作为依赖被其他项目引入,不要打包成可执行Jar。修改库的pom.xml中的spring-boot-maven-plugin配置:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 禁用可执行Jar打包,生成普通Jar作为库 --> <skip>true</skip> </configuration> </plugin> </plugins> </build>或者如果需要保留插件的其他功能,使用
repackage目标并设置classifier:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <!-- 生成普通Jar(无classifier)用于依赖,可执行Jar带classifier --> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin>修改后重新执行
mvn clean install发布库到本地仓库。检查依赖的scope设置
打开库的pom.xml,确认jjwt等传递依赖的scope是默认的compile(可以不写,默认就是compile),不要设置为provided、test或optional。例如:<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> <!-- 不要加scope,或者明确写scope="compile" --> </dependency>检查主项目的依赖排除
查看主项目中引入你的库的依赖配置,确保没有<exclusions>标签排除了jjwt相关依赖:<dependency> <groupId>你的库groupId</groupId> <artifactId>你的库artifactId</artifactId> <version>你的库版本</version> <!-- 移除不必要的exclusions --> <!-- <exclusions> <exclusion> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> </exclusion> </exclusions> --> </dependency>重新发布完整的库到本地仓库
先彻底删除本地仓库中你的库对应的目录(比如~/.m2/repository/你的groupId/你的artifactId/),然后进入每个库的目录,执行mvn clean install,确保打包过程没有报错,生成的pom.xml在本地仓库中存在且包含完整的依赖声明。验证依赖传递
在主项目目录执行mvn dependency:tree命令,查看输出中是否包含jjwt相关依赖。如果还是没有,检查输出中你的库节点下是否有对应的依赖项,以此定位问题所在。
内容的提问来源于stack exchange,提问作者tarun preet Singh
相关产品推荐
相关产品推荐

