博客总结 : 核心报错信息如下 :

Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

jar 包中的签名文件是无效的 , 删除 META-INF 目录下的签名文件即可 ;
打开压缩包 , 删除这两个 签名文件 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP





一、报错信息



处理依赖库时 , 选择将 依赖库 打包到 Jar 包内 , 配置如下 :

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP

如果使用第二种方式 , 会在打包时 , 只对核心的主程序代码进行打包 , 将依赖库拷贝到同级目录中 ;

如果这样 , 将程序拷贝到其它目录时 , 还需要单独拷贝依赖库 , 这样操作比较繁琐 ;

这是使用第二种方式 , 输出的 jar 包 , 要独立管理一堆 jar 包 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP


所需的依赖库 , 都在左侧的 " Extracted ‘xxx’ " 中 , 这样该依赖库就可以被打包到 jar 包中 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP

打包后的效果是下面的样式 , 一堆的包名文件 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP

执行上述 jar 程序 , 会报错 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP


完整报错信息 :

D:\>java -jar App.main2.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
        at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
        at sun.security.util.SignatureFileVerifier.process(Unknown Source)
        at java.util.jar.JarVerifier.processEntry(Unknown Source)
        at java.util.jar.JarVerifier.update(Unknown Source)
        at java.util.jar.JarFile.initializeVerifier(Unknown Source)
        at java.util.jar.JarFile.getInputStream(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
        at sun.misc.Resource.cachedInputStream(Unknown Source)
        at sun.misc.Resource.getByteBuffer(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)




二、解决方案



核心报错信息 :

Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

错误:发生了一个JNI错误,请检查您的安装并重试
java.lang.SecurityException: Manifest主属性的签名文件摘要无效

该错误提示很明显 , 就是说 jar 包中的 META-INF 信息签名文件无效 ;


签名文件 无效 , 就不用签名文件 , 直接删除这两个签名文件 ;

使用压缩工具打开 , 这里我使用的是 7-zip 压缩工具打开了 jar 包 , 删除 MANIFEST.MF 和 MSFTSIG.RSA 两个签名文件 ;

【错误记录】IntelliJ IDEA 打包包含依赖库的 Jar 包执行报错 ( Invalid signature file digest for Manifest main attribute )-LMLPHP
然后再次执行程序 , 程序可以正常运行 ;

09-01 14:47