美文网首页
maven 找不到符号解决

maven 找不到符号解决

作者: 文小叨_9caa | 来源:发表于2019-08-02 20:28 被阅读0次

    今天忽然发现本地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类,后续加载的同名的类会被忽略。

    相关文章

      网友评论

          本文标题:maven 找不到符号解决

          本文链接:https://www.haomeiwen.com/subject/fkmldctx.html