• 【错误记录】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 两个签名文件 ;

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

  • 相关阅读:
    字符串String倒序输出的四种方法
    【Java基础】数据结构与算法
    [Typescript]基础篇之元组
    【uni-app从入门到实战】商品列表
    asp.net core 资源过滤器
    每日一博 - 浅析事务隔离级别& MVCC机制
    cs与msf联动
    用JS实现简单的屏幕录像机
    【李沐深度学习笔记】矩阵计算(5)
    react项目实战 5 嵌套路由实现TabBar
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132608382