我正在运行一个Hadoop作业some trouble,其中包含的新版本的Guava比Hadoop发行版中包含的版本(CDH 5.2)更新。这是一个已知问题。我尝试使用Maven shade插件解决它by shading the libraries。因此,我在pom.xml
添加了以下几行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>com.google</pattern>
<shadedPattern>thirdparty.com.google</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
不幸的是,阴影似乎不起作用。当我提取uber-JAR时,没有文件夹thirdparty/com/google
,但仍然是文件夹com/google
。
有人知道出了什么问题吗?
答案 0 :(得分:3)
这对我有用:
<relocations>
<relocation>
<pattern>com.google.</pattern>
<shadedPattern>thirdparty.com.google.</shadedPattern>
</relocation>
</relocations>
注意图案末尾的点。
答案 1 :(得分:2)
您可能需要在<configuration>
部分指定显式artifactSet :: includes:
<configuration>
<artifactSet>
<includes>
<include>com.google.guava:*</include>
...
</includes>
</artifactSet>
<relocations>
...
答案 2 :(得分:0)
好像你需要在重定位规则中引用包名,而不是maven groupId,我在我的lib中使用rx v1并且不想用它污染用户的命名空间,pom.xml部分下面重写字节码,所以最终的uberjar将有rx,但重命名(shaded.rx)。
<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>
<relocations>
<relocation>
<pattern>rx</pattern>
<shadedPattern>shaded.rx</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>