jar包冲突完整解决⽅案
背景
开发flink程序,引⼊了Hadoop-hdfs相关包⽤于访问hdfs,程序开发完成后,本地测试⽆任何问题,提交上线,运⾏jar提⽰如下错
误:
java.lang.NoSuchMethodError: org.apachemons.cli.Option.builder(Ljava/lang/String;)Lorg/apache/commons/cli/Option$Builder;
at org.apache.point.parser.CommandLineOptions.<clinit>(CommandLineOptions.java:27) ~[flink-dist_2.12-1.12.1.jar:1.12.1]
at org.apache.point.ClusterConfigurationParserFactory.options(ClusterConfigurationParserFactory.java:42) ~[flink-dist_2.12-1.12.1.jar:1.12.1] at org.apache.Options(ClusterConfigurationParserFactory.java:50) ~[flink-dist_2.12-1.12.1.jar:1.12 at org.apache.point.parser.CommandLineParser.pars
e(CommandLineParser.java:42) ~[flink-dist_2.12-1.12.1.jar:1.12.1]
at org.apache.flink.runtime.util.ConfigurationParserUtils.loadCommonConfiguration(ConfigurationParserUtils.java:135) ~[flink-dist_2.12-1.12.1.jar:1.12.1]
at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.loadConfiguration(TaskManagerRunner.java:352) ~[flink-dist_2.12-1.12.1.jar:1.12.1]
at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.runTaskManagerSecurely(TaskManagerRunner.java:367) [flink-dist_2.12-1.12.1.jar:1.12.1]
at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.main(TaskManagerRunner.java:348) [flink-dist_2.12-1.12.1.jar:1.12.1]
原因分析
引⽤缺失,如字⾯含义:未到对应的⽅法,可能是引⽤的类⽆该⽅法,查看编译好的class⽂
件,org.apachemons.cli.Option.builder 的class⽂件存在,可排除缺失引⽤。
jar包冲突
查看本地依赖是否存在jar冲突
推荐个idea的插件:maven helper,安装插件后,打开项⽬l⽂件,点击:dependcy Analyzer,界⾯如下:
点击common-cli,如下:
可以看出依赖包有1.2和1.3.1的包,存在包冲突,排查1.3.1的包即可,排除⽅法如下:选中右侧1.3.1的版本:右键,点击jump to left tree ,如下:
右键点击exclude,⼀键排除冲突包,点击reimport,刷新依赖即可,可以看到common-cli不存在冲突列表:
为什么本地不会冲突?
maven打包本地jar包因为hadoop相关包,scope设置的provided,只在编译时⽣效,运⾏时不⽣效
<!-- 访问hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${cdh.hadoop.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${cdh.hadoop.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${cdh.hadoop.version}</version>
<scope>provided</scope>
</dependency>
为什么服务器上冲突,服务器存在hadoop相关jar包,与打包后的flink-runtime中包含的common-cli存在版本冲突。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论