当前位置 博文首页 > asd1358355022的博客:检测项目中所有jar包中相同文件冲突

    asd1358355022的博客:检测项目中所有jar包中相同文件冲突

    作者:[db:作者] 时间:2021-08-04 21:49

    当项目中有你指定的jar包,但是其他引进的依赖中也有可能包含这个jar包,由于版本对不上可能会导致项目出问题

    例如:一个gson中一个jar包中的JsonObject文件中没有keySet()

    ## Failed to execute plan for region: cn-neimeng-env86-d01, cause: com.google.gson.JsonObject.keySet()Ljava/util/Set;
    java.lang.NoSuchMethodError: com.google.gson.JsonObject.keySet()Ljava/util/Set;
    ? ? ? ? at com.aliyuncs.endpoint.LocalConfigRegionalEndpointResolver.initRegionalEndpointData(LocalConfigRegionalEndpointResolver.java:41)
    ? ? ? ? at com.aliyuncs.endpoint.LocalConfigRegionalEndpointResolver.initLocalConfig(LocalConfigRegionalEndpointResolver.java:30)
    ? ? ? ? at com.aliyuncs.endpoint.LocalConfigRegionalEndpointResolver.<init>(LocalConfigRegionalEndpointResolver.java:20)
    ? ? ? ? at com.aliyuncs.endpoint.DefaultEndpointResolver.<init>(DefaultEndpointResolver.java:31)
    ? ? ? ? at com.aliyuncs.endpoint.DefaultEndpointResolver.<init>(DefaultEndpointResolver.java:52)
    ? ? ? ? at com.aliyuncs.DefaultAcsClient.<init>(DefaultAcsClient.java:61)
    ? ? ? ? at com.aliyuncs.DefaultAcsClient.<init>(DefaultAcsClient.java:49)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.spi.context.impl.DefaultRunjobContext.getIAcsClient(DefaultRunjobContext.java:68)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.core.executor.impl.PlanExecutorManagerImpl.execute(PlanExecutorManagerImpl.java:130)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.executors.impl.ExecutePlanExecutor.doExecute(ExecutePlanExecutor.java:98)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.executors.impl.ExecutePlanExecutor.doExecute(ExecutePlanExecutor.java:28)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.executors.CliCommandExecutorBase.execute(CliCommandExecutorBase.java:36)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.CliMain.execute(CliMain.java:68)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.CliMain.go(CliMain.java:100)
    ? ? ? ? at com.aliyun.ecm.admin.runjob.cli.CliMain.main(CliMain.java:133)

    排查问题:

    1、排查自己的gson版本,查看项目文件中的lib中的jar包

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>
    #进入到项目的lib路径下查看gson版本
    ls -lht | grep gson
    #解压jar包 例 2.8.5版本
    unzip gson-2.8.5.jar
    #进入到解压的文件夹下
    cd com/google/gson/
    #反编译里面的JsonObject.class文件,查看里面是否有这个方法
    javap JsonObject.class
    #如果有可能是和其他jar包中包含的gson冲突了,需要用第二步进行排查,如果没有就是这个jar没有这个方法需要做版本改动
    
     
    

    2、检查lib路径下所有的jar包,包含此冲突文件的操作

    ?for j in `ls ./*`; do echo "##> $j"; ?jar vtf $j | grep JsonObject; done

    出现如下的问题,除了gson包中含有的JsonObject.class之外,还有其他的两个包中含有这个文件,之后解决文件冲突之后在运行项目测试

    ?

    cs