我正在使用 hadoop-2.7.2
,我用 IntelliJ 做了一个 MapReduceJob。在我的工作中,我正在使用 apache.commons.cli-1.3.1
并将 lib 放入 jar 中。
当我在我的 Hadoop 集群上使用 MapReduceJob 时,我有一个 NoSuchMethodError
:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Option.builder(Ljava/lang/String;)Lorg/apache/commons/cli/Option$Builder;
我不明白,因为该方法存在于类 Option
中,而类 Option
是从 commons-cli.jar
中提取的到我的应用程序 jar 。此外,我的其他图书馆没有这个问题。
感谢您的宝贵时间。
最佳答案
我们能够使用 maven class relocations 修复此错误.如果您使用 shade 插件来构建您的 jar,请将以下内容添加到 pom.xml 的适当部分:
<!-- necessary to fix NoSuchMethodError: org.apache.commons.cli.Option.builder -->
<relocations>
<relocation>
<pattern>org.apache.commons.cli</pattern>
<shadedPattern>org.shaded.commons.cli</shadedPattern>
</relocation>
</relocations>
还需要在依赖项部分的顶部添加对 commons-cli v1.3+ 的显式引用,然后再添加任何可能具有对旧版本 commons-cli 的传递引用的依赖项。
关于java - Hadoop NoSuchMethodError apache.commons.cli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654957/