IntellJ 打包Jar包出现Jar包签名问题的一种解决办法。

最近一段时间改用了IntelliJ,遇到一个打Jar包的问题。这里的前提是maven项目。

因为要提交hadoop相关jar包去服务器上执行job,所以开发完hadoopMR逻辑之后要把相关 任务类和依赖打包上传。

依赖中有一个bouncyCastle相关的jdk15on,如果用Intellj 建立artifacts去打包就会把相关依赖jar包进拆包,然后再合并起来。这样有个问题,将原有的jar包拆开后,jar包的签名就被破坏了,整合的jar包运行job的时候就会出现java.lang.SecurityException: Invalid signature file digest for Manifest main attributes”。

百度或者google的方法就是删掉 .SF 或者.DSA文件,这样确实可以运行。但是如果调用了bouncy的包,就会疯狂报错,

java.lang.SecurityException: JCE cannot authenticate the provider BC。

原因就是ide打包的时候拆了原来bouncy的jar包,导致数字签名破坏了。

解决办法就是让这些带有数字签名的jar包原封不动的被关联到用作执行hadoop job的jar包上。

 

  • 第一个办法就是用maven的命令打包:
  1. 在这个项目下面,用mvn clean package -Dmaven.test.skip=true,跳过单元测试进行打包,这样在target目录下面,将会生成 一个体积很小的jar包(例如,hadoop-***.jar)下面称为“A jar包” 和一个***.tar.gz压缩包 下面称 “B 压缩包”。
  2. B压缩包里面包含一个lib文件夹,里面含有运行任务需要的第三方jar包
  3. 现在我们把生成的A jar包 B压缩包 里面 lib文件夹里包含的任务需要的依赖jar包放在同一个运行目录下面
  4. 运行任务时指定执行jar包文件为 Ajar包,这样就可以运行成功了。

 

  • 第二个办法是通过MF文件进行关联,用ide的artifact打包,这个还没进行测试。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值