您的位置:首页 > 其它

使用maven-shade-plugin插件解决spark依赖冲突问题

2017-02-10 18:39 891 查看
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/54973182冷血之心的博客)

依赖冲突:NoSuchMethodError,ClassNotFoundException
      当用户应用于Spark本身依赖同一个库时可能会发生依赖冲突,导致程序奔溃。依赖冲突表现为在运行中出现NoSuchMethodError或者ClassNotFoundException的异常或者其他与类加载相关的JVM异常。
此时,若能确定classpath中存在这个包,则错误是因为classpath中存在2个不同版本的jar包了,比如常见的log4j,你在classpath中添加了log4j.jar,而spark的lib目录中也有log4j.jar,而且这2个jar包版本不一致的话,就会出现依赖冲突问题。解决办法有2种:
(1)修改你的应用,使其使用的依赖库的版本与Spark所使用的相同。
(2)使用称为shading的方式打包你的应用。使用maven-shade-plugin插件进行高级配置来支持这种打包方式。shading可以让你以另一种命名空间保留冲突的包,并自动重写应用的代码使得它们使用重命名后的版本。这种技术有些简单粗暴,不过对于解决运行时依赖冲突的问题非常有效。
关于maven-shade-plugin插件的详细介绍请参阅:http://www.jianshu.com/p/7a0e20b30401#maven-shade-plugin插件的官方介绍:http://maven.apache.org/plugins/maven-shade-plugin/index.html

Java 工程经常会遇到第三方Jar 包冲突,使用 maven-shade-plugin 解决 jar 或类的多版本冲突。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候把类重命名。举例如下:
下面的配置将org.codehaus.plexus.util jar 包重命名为org.shaded.plexus.util。  <build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-shade-plugin</artifactId>

<version>2.4.3</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<relocations>

<relocation>

<pattern>org.codehaus.plexus.util</pattern>

<shadedPattern>org.shaded.plexus.util</shadedPattern>

<excludes>

<exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>

<exclude>org.codehaus.plexus.util.xml.pull.*</exclude>

</excludes>

</relocation>

</relocations>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>
主要是<relocations>标签如下,其中可以有并列的多个<relocation>标签,也可以没有<excludes>标签哦,小伙伴们结合自己的情况使用哦~


如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐