maven 找不到符号解决

2019-08-02  本文已影响0人  文小叨_9caa

今天忽然发现本地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的加载顺序
  1. $java_home/lib 目录下的java核心api

  2. $java_home/lib/ext 目录下的java扩展jar包

  3. java -classpath/-Djava.class.path所指的目录下的类与jar包

  4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

  5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

  6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

  7. 我们的项目路径/WEB-INF/classes下的class文件

  8. 我们的项目路径/WEB-INF/lib下的jar文件

classpath的加载顺序

java xx -classpath ".;a.jar;b.jar;" 时,如果a.jar和b.jar有重名的类,那么会以a.jar的为准,忽略b.jar的,因为jvm按照-classpath参数的路径先后顺序去load类,后续加载的同名的类会被忽略。

上一篇下一篇

猜你喜欢

热点阅读