我在用 hadoop-2.7.2
我和intellij做了一个mapreducejob。在我的工作中,我用 apache.commons.cli-1.3.1
我把lib放进jar里。
当我在hadoop集群上使用mapreducejob时,我有一个 NoSuchMethodError
:
线程“main”java.lang.nosuchmethoderror中出现异常:org.apache.commons.cli.option.builder(ljava/lang/string;)lorg/apache/commons/cli/选项$builder;
我不明白,因为类中存在方法 Option
还有班级 Option
是从 commons-cli.jar
到我的应用程序jar。而且,我和其他库没有这个问题。
谢谢你抽出时间。
3条答案
按热度按时间gkn4icbw1#
我们通过下一个gradle配置解决了这个问题:
1cosmwyk2#
我们可以使用maven类重新定位来修复这个错误。如果您使用shade插件构建jar,请在pom.xml的相应部分中添加以下内容:
此外,需要在依赖项部分的顶部添加对commons cli v1.3+的显式引用,然后再添加对commons cli旧版本的可传递引用的任何依赖项。
7uhlpewt3#
问题似乎与
classloader
正在加载类。因为static Builder class
在common-cli 1.4
,而一些hadoop
依赖项仍然引用旧版本-出现问题。在我的例子中,通过将jar文件的添加顺序更改为负责在程序执行之前设置环境的shell脚本中的类路径,问题得到了解决。之前,我将jar添加到类路径中,比如
已更改为
它解决了这个问题。