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



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

    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 目录下的签名文件即可 ;
    打开压缩包 , 删除这两个 签名文件 ;

    在这里插入图片描述





    一、报错信息



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

    在这里插入图片描述

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

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

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

    在这里插入图片描述


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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述


    完整报错信息 :

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22




    二、解决方案



    核心报错信息 :

    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 两个签名文件 ;

    在这里插入图片描述
    然后再次执行程序 , 程序可以正常运行 ;

  • 相关阅读:
    【C语言必知必会 | 子系列第六篇】深入剖析循环结构(2)
    VTK实现裁剪删除模型功能
    『忘了再学』Shell流程控制 — 35、多分支case条件语句
    【同时完成超分和MEF】
    大学生《Web课程谁》期末网页制作 HTML+CSS+JavaScript 网页设计实例 瑜伽网站企业网站制作
    【报错记录】MybatisPlus报Mapped Statements collection does not contain value for...
    Realme x 刷有root权限
    初识进程状态
    一文搞懂序列密码
    C#判断窗体是否被遮挡 - 开源研究系列文章
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132608382