Maven自动下载未声明的JDK1.4版BouncyCastle依赖求助
看起来你已经做了不少基础操作,但Maven还是顽固地拉取JDK 1.4版的BouncyCastle——十有八九是间接依赖在搞鬼,或者Maven的依赖管理规则在起作用。我给你一步步拆解解决方法:
1. 先揪出是谁在引入旧版依赖
你以为项目没依赖BouncyCastle,但很可能是某个第三方库悄悄把它带进来了。用Maven的依赖树命令定位根源:
./mvnw dependency:tree -Dincludes=org.bouncycastle
这个命令会输出所有和BouncyCastle相关的依赖路径,比如你可能会看到类似这样的结果:
[INFO] com.yourcompany:your-app:jar:1.0.0-SNAPSHOT
[INFO] - some.thirdparty:library:jar:2.0.0:compile
[INFO] - org.bouncycastle:bcprov-jdk14:jar:1.46:compile
这样你就知道是哪个库在拉旧版本了。
2. 排除旧版依赖,显式声明新版
找到那个引入旧版的依赖后,在你的pom.xml里给它加上排除规则,同时显式添加JDK 1.5版本的BouncyCastle依赖:
第一步:排除旧版
<dependency> <groupId>some.thirdparty</groupId> <!-- 刚才找到的第三方库groupId --> <artifactId>library</artifactId> <!-- 对应的artifactId --> <version>2.0.0</version> <exclusions> <exclusion> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk14</artifactId> <!-- 旧版的artifactId --> </exclusion> </exclusions> </dependency>
第二步:显式添加JDK 1.5+版本
注意JDK 1.5及以上版本的BouncyCastle artifactId是bcprov-jdk15on,别写错了:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>你想要的版本号</version> <!-- 比如1.70 --> </dependency>
3. 强制清理Maven缓存,重新构建
有时候本地缓存的依赖信息会有残留,用以下命令强制更新:
./mvnw clean install -U
-U参数会让Maven强制检查所有依赖的更新,彻底清理旧的缓存文件重新下载。
4. 检查JHipster的依赖管理配置
JHipster项目通常会在<dependencyManagement>节点里统一管理所有依赖的版本,你需要确认这里有没有锁定BouncyCastle的旧版本:
打开pom.xml,找到<dependencyManagement>,搜索org.bouncycastle,如果有旧版本的配置,把它改成你要的1.5+版本号。
5. 清理IDE缓存(如果用IDE开发)
如果你是在IntelliJ、Eclipse这类IDE里操作,IDE可能会缓存旧的依赖信息,导致你改了pom但还是看到旧版本:
- IntelliJ:点击
File -> Invalidate Caches...,选择"Invalidate and Restart" - Eclipse:点击
Project -> Clean,然后右键项目选择Maven -> Update Project
6. 检查Maven全局settings
最后,检查用户目录下的.m2/settings.xml,看看有没有配置镜像或者依赖覆盖规则,强制指定了BouncyCastle的旧版本。如果有,修改或删除对应的配置。
按照这些步骤来,应该就能彻底摆脱旧版的BouncyCastle了。
内容的提问来源于stack exchange,提问作者aks

