当项目中有你指定的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之外,还有其他的两个包中含有这个文件,之后解决文件冲突之后在运行项目测试