我在使用 MacOS Sierra 的 Mac 上构建 MapReduce 作业时遇到了同样的问题。相同的代码在 Ubuntu Linux(14.04 LTS 和 16.04 LTS)上运行没有问题。MapReduce 发行版是 2.7.3,并配置为单节点独立操作。该问题似乎与将许可证文件复制到 META_INF 目录有关。我的问题是通过在 Maven Shade 插件配置中添加一个转换器来解决的,特别是:ApacheLicenseResourceTransformer
.
这是 POM.xml 的相关部分,它是该部分的<build>
一部分:
<plugin> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>path.to.your.main.class.goes.here</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
请注意,我还使用ManifestResourceTransformer
指定 MapReduce 作业的主类。