maven 找不到符号解决
今天忽然发现本地maven install的时候调用bcprov-jdk15on-1.59.jar方法时,报“错误: 找不到符号”
现象
1.代码跳转到.m2/repository下,显示有该方法。
2.线上编译无报错,线上使用的是maven 3.0.4,本地编译报错。
XXXX.java:120: 错误: 找不到符号
result = String.format("%s%s" , key , Hex.toHexString(outBytes).toUpperCase(Locale.ROOT));
^
符号: 方法 toHexString(byte[])
位置: 类 Hex
失败尝试
网络搜索解决方法:
1.maven reimport
2.File ->Invalidate caches/ restart
3.maven clean
统一maven版本:
曾经因为有一个依赖需要高版本maven,升级过maven的版本,但是Intellij IDEA未更新,所以将所有maven调整为3.0.4,依旧报错
javac编译:
代码引用是.m2/repository,该路径下的jar包是正常,有该方法
compile的时候,classpath设置为LocalWarehouse文件夹下,反编译以后,依然有这方法
直接通过javac编译,依旧报错
原因
搜索bcprov-jdk15on-1.59.jar的时候,看到一个JCE这个关键词,想起前几天使用了AES的“AES/CBC/PKCS7Padding”加密算法,报错
java.lang.SecurityException: JCE cannot authenticate the provider BC
使用了如下解决方法
https://blog.csdn.net/wangxi_xixi/article/details/78027795
增加的bcprov-jdk16-143.jar和我方法调用冲突了,classpath首先找到bcprov-jdk16-143.jar,该jar没有这方法。
解决方法
bcprov-jdk16-143.jar换成项目方法调用的版本
相关知识点
jar和class的加载顺序
-
$java_home/lib 目录下的java核心api
-
$java_home/lib/ext 目录下的java扩展jar包
-
java -classpath/-Djava.class.path所指的目录下的类与jar包
-
$CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载
-
$CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载
-
$CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载
-
我们的项目路径/WEB-INF/classes下的class文件
-
我们的项目路径/WEB-INF/lib下的jar文件
classpath的加载顺序
java xx -classpath ".;a.jar;b.jar;" 时,如果a.jar和b.jar有重名的类,那么会以a.jar的为准,忽略b.jar的,因为jvm按照-classpath参数的路径先后顺序去load类,后续加载的同名的类会被忽略。