Hadoop NoSuchMethodError apache.commons.cli

Ant*_*nin 6 java hadoop nosuchmethoderror apache-commons-cli

我正在使用,hadoop-2.7.2并且使用IntelliJ做过MapReduceJob。在我的工作中,我正在使用apache.commons.cli-1.3.1,并将lib放入了jar中。

在Hadoop集群上使用MapReduceJob时,我有一个NoSuchMethodError

线程“主”中的异常java.lang.NoSuchMethodError:org.apache.commons.cli.Option.builder(Ljava / lang / String;)Lorg / apache / commons / cli / Option $ Builder;

我不明白,因为该方法存在于类中Option,并且该类Option从中提取commons-cli.jar到我的应用程序jar中。而且,我的其他库没有这个问题。

感谢您的时间。

mor*_*eus 5

我们能够使用Maven 类重定位来修复此错误。如果您使用 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>
Run Code Online (Sandbox Code Playgroud)

此外,还需要在依赖项部分的顶部添加对 commons-cli v1.3+ 的显式引用,然后才能对旧版本的 commons-cli 进行传递引用。


小智 1

我们通过下一个 gradle 配置解决了这个问题:

 compile('org.apache.parquet:parquet-tools:1.9.0'){
  exclude module:"commons-cli"
 }
Run Code Online (Sandbox Code Playgroud)