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

来源:互联网 发布:python 3.2.5.msi下载 编辑:程序博客网 时间:2024/06/05 12:46

最近一段时间改用了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的命令打包。 在这个项目下面,用mvn clean package -Dmaven.test.skip=true,跳过单元测试进行打包,这样在target目录下面,将有 一个体积很小的jar包和一个tar.gz压缩包,把生成的jar包(例如,hadoop-***.jar)和tar.gz 压缩包lib下面的依赖jar包放在一个目录下面,指定hadoop运行jar文件为hadoop-***.jar,这样就可以完美运行成功了。

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

1 0
原创粉丝点击