maven插件学习(maven-shade-plugin和maven-antrun-plugin插件)
admin
2024-03-17 13:43:50

整合spark3.3.x和hive2.1.1-cdh6.3.2碰到个问题,就是spark官方支持的hive是2.3.x,但是cdh中的hive确是2.1.x的,项目中又计划用spark-thrift-server,导致编译过程中有部分报错。其中OperationLog这个类在hive2.3中新增加了几个方法,导致编译报错。这个时候有两种解决办法:

  • 修改spark源码,注释掉调用OperationLog中新增方法的地方,看了下源码一共有好几处需要注释
  • 在spark源码中添加新版本的OperationLog类,打包时候需要替换原先的hive-exec中这些类,否则运行时候可能会加载不到这个类

最终决定使用第二种方法,减少对源码的修改。

OperationLog类打包以后会出现在hive-exec-{version}.jar中,其实要做的事情很简单,就是删除这个jar中的OperationLog类,这里通过maven实现我知道的有如下两种实现办法:

  • 通过maven-shade-plugin进行relocation
  • 通过maven-antrun-plugin解压hive-exec-{version}.jar删除OperationLog相关类再(复制新编译的OperationLog相关类 这部分可以省略,不复制也可以)打包新的hive-exec-{version}.jar

上述两种方法各有优劣

  • 通过shade方法进行relocation后会把原先hive-exec中所有的文件都打包到引入它的jar中,会导致生成的jar比较大,hive-exec自身就34M了。这种处理方法也是开源项目中常用的处理方法
  • 通过antrun解压删除相关类再压缩我目前没见别的项目这么玩过。这个时候可以选择是否将自己写的OperationLog类再打包回hive-exec中,如果不打包别的地方用到这个类就会报错了。

第一种方法的pom中build部分如下

    org.apache.maven.pluginsmaven-dependency-plugin3.3.0packagecopy-dependencies${project.build.directory}/libhive-execorg.apache.maven.pluginsmaven-shade-plugin3.2.4packageshadefalseorg.apache.hive:hive-execorg.apache.hive:hive-execMETA-INF/*.MFMETA-INF/*.SFMETA-INF/*.DSAMETA-INF/*.RSAorg/apache/hadoop/hive/ql/session/OperationLog*

第二种方法的pom中build部分如下

    org.apache.maven.pluginsmaven-jar-plugin3.2.0default-jarpackagejar**/OperationLog*.classorg.apache.maven.pluginsmaven-dependency-plugin3.3.0packagecopy-dependencies${project.build.directory}/liborg.apache.maven.pluginsmaven-antrun-plugin1.8packagerun            

虽然上述两种方法都能达到目的,第一种看着简洁一点,第二种看着操作复杂一点。不过我还是倾向于第二种,首先第二种不会减少和增加包的数量,包体积变化也不会太大,看着也更加符合预期的目的,其次第二种操作完以后看起来很简洁,更加适合强迫症或者代码洁癖患者。

参考链接:

maven-shade-plugin

maven-antrun-plugin

相关内容

热门资讯

上证早知道|机构逆势买入AI应... 国新办定于1月14日举行新闻发布会,介绍2025年全年进出口情况。“十五五”钢铁行业绿色低碳、智能升...
银河证券:生成式搜索兴起,AI... 银河 证券研报指出,当前AI产业催化不断,AI应用商业化具备广阔发展空间,以生成式搜索(GEO)为代...
虎头海雕领衔,龙山湖上演冬日“... 1月11日至12日,珲春敬信龙山湖冰封湖面迎来虎头海雕、白尾海雕及秃鹫等国家一级保护鸟类。这些珍禽或...
中信建投:重视保险板块配置机会 中信建投研报表示,负债端看好分红险持续承接居民稳健投资需求并驱动新单实现快速增长,资产端权益市场向好...
哈尔滨市人民代表大会常务委员会...   经哈尔滨市第十六届人民代表大会常务委员会第四十三次会议授权,哈尔滨市第十六届人民代表大会常务委员...