美文网首页
java包冲突解决方案

java包冲突解决方案

作者: HelloWide | 来源:发表于2019-03-29 16:43 被阅读0次

起因

工作中一位新同事咨询请教Flink client cluster启动失败问题,相关日志文件如下:

2019-03-29 15:01:18,645 | ERROR | [main] | YARN Application Master initialization failed | org.apache.flink.yarn.YarnApplicationMasterRunner (YarnApplicationMasterRunner.java:426) 
java.lang.NoSuchMethodError: org.apache.flink.runtime.clusterframework.BootstrapTools.createWebMonitorIfConfigured(Lorg/apache/flink/configuration/Configuration;Lorg/apache/flink/runtime/highavailability/HighAvailabilityServices;Lorg/apache/flink/runtime/webmonitor/retriever/LeaderGatewayRetriever;Lorg/apache/flink/runtime/webmonitor/retriever/MetricQueryServiceRetriever;Lorg/apache/flink/api/common/time/Time;Lorg/apache/flink/runtime/concurrent/ScheduledExecutor;Lorg/slf4j/Logger;)Lorg/apache/flink/runtime/webmonitor/WebMonitor;
at org.apache.flink.yarn.YarnApplicationMasterRunner.runApplicationMaster(YarnApplicationMasterRunner.java:345)
at org.apache.flink.yarn.YarnApplicationMasterRunner$1.call(YarnApplicationMasterRunner.java:195)
at org.apache.flink.yarn.YarnApplicationMasterRunner$1.call(YarnApplicationMasterRunner.java:192)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1781)
at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)
at org.apache.flink.yarn.YarnApplicationMasterRunner.run(YarnApplicationMasterRunner.java:192)
at org.apache.flink.yarn.YarnApplicationMasterRunner.main(YarnApplicationMasterRunner.java:125)

很明显这个是包有问题,了解得知没有对源码包做任何改动,只是想测试Flink job相关submit的测试,初步定位有个是工程的包冲突了。最终原因有两个:
1. Flink版本1.4,且自带的web工程依赖了很多Flink自身的很多包没有与开发者本身的同步,这个很好解决,在同事的工程下修改flink版本即可;
2. 问题任然无法解决,查看同事工程pom依赖情况,发现冲突的包很多,因此专门花了半个多小时排包确认版本;

正题

个人以为对项目工程依赖的第三方包没有清晰的认识,是不严谨和不负责任的行为!笔者多次遇见某项目包自测ok后但是在不同生产环境下出现的各种诡异错误,最终都是包版本问题。其实方法很简单,如下介绍一种常用的解决方法:

1.首先打开idea工程,打开pom.xml,如图打开依赖图:
依赖关系查看.PNG
2.查看依赖关系:
diagram冲突解决.PNG

如图很明显有一个xz包连接线是红色的,表明这个包已经产生了冲突。

3.解决冲突
diagram冲突解决.PNG

查看pom.xml发现会在引用xz包的地方添加:

<exclusion>
  <artifactId>xz</artifactId>
  <groupId>org.tukaani</groupId>
</exclusion>

扩展

对于大型工程来说,操作不方便,笔者这里推荐一款好用的idea插件:Maven Helper
安装plugin后,可以发现在pom.xml编辑区域下,多了一个Dependency Analyse:

dependence.PNG
查看可以发现红色的是冲突:选择右键点击后选择Exclude即可:
maven_helper解决冲突.PNG

其他情况

有些情况比如说一个包必须依赖某包1.2版本,另外一个包必须依赖1.3,那么需要使用maven-shade-plugin对包进行shade处理,本文不做详细赘述,比如常见的 ES和Hbase Guava包冲突解决方式


说明:建议idea 2018版本以上,新版本对各插件的支持比较好,低版本可以不一定有相关支持;另外还是eclipse赶紧改IDE吧!
参考链接:
https://www.elastic.co/cn/blog/to-shade-or-not-to-shade
https://plugins.jetbrains.com/plugin/7179-maven-helper

相关文章

  • java包冲突解决方案

    起因 工作中一位新同事咨询请教Flink client cluster启动失败问题,相关日志文件如下: 很明显这个...

  • 包 1. 作用: 管理Java文件 解决同名文件冲突 2. 定义包:package包名 必须放在Java源程序第一...

  • Java_basic_5: 包/package

    包/package 包的作用 管理Java文件 解决同名文件冲突 包的定义 格式: package package...

  • web 16.Maven基础

    jar包冲突 provided 调用系统自己的jar包 插件tomcat 插件 java编译器 项目对象模型...

  • 【java基础整理】1-几个关键字与多态

      在java当中,通过保证包名的唯一性来解决重名类的冲突,各个包都是一个独立的编译单元。每个.java文件都在包...

  • npm i element-ui -S报错

    问题主要是安装的包与已经存在的包有冲突,使用强行通过就可以了 解决方案 npm install --force 如...

  • java 依赖包冲突,使用maven的Shade方式解决

    java 依赖包冲突,使用maven的Shade方式解决 [TOC] 问题描述 程序中同时使用了hadoop工具包...

  • Execution failed for task ':app:

    查看各个compile包的AndroidManifest.xml的包名是否有冲突 重复了就修改,但注意java包下...

  • Java依赖不同版本冲突解决方案之shade包

    我们在很多场景下会碰到java包冲突的问题: 代码由第三方开发,无法对包名或依赖做管控 跑在同一个进程里的代码,更...

  • java Jar包冲突替包方法

    情景一: A-pom继承B-pom,B-pom依赖xx。A-pom想覆盖xx的版本号,直接在A-pom中重新引入x...

网友评论

      本文标题:java包冲突解决方案

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