shade解决jar包冲突

当用户应用于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可以让你以另一种命名空间保留冲突的包,并自动重写应用的代码使得它们使用重命名后的版本。这种技术有些简单粗暴,不过对于解决运行时依赖冲突的问题非常有效。

Java 工程经常会遇到第三方Jar 包冲突,使用 maven-shade-plugin 解决 jar 或类的多版本冲突。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候把类重命名。

下面的配置将org.codehaus.plexus.util jar 包重命名为org.shaded.plexus.util。


 
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        2.4.3
        
          
            package
            
              shade
            
            
              
                
                    org.codehaus.plexus.util
                    org.shaded.plexus.util
               
                org.codehaus.plexus.util.xml.Xpp3Dom
                org.codehaus.plexus.util.xml.pull.*
               
                
              
            
          
        
      
    
  

主要是 标签如下,其中可以有并列的多个 标签,也可以没有 标签进行排除。

你可能感兴趣的:(shade解决jar包冲突)