Invalid signature file digest for Manifest main attributes

解决java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

当项目依赖其他jar包的时候,打出的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(SignatureFileVerifier.java:317)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:259)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:323)
        at java.util.jar.JarVerifier.update(JarVerifier.java:234)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:396)
        at java.util.jar.JarFile.ensureInitialization(JarFile.java:641)
        at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:993)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:456)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

原因:因为依赖jar包中的META-INF中有多余的.SF文件与当前jar包冲突,

  • 解决方案一

    删除依赖jar包的.SF文件
  • 解决方案二

    在打完的jar包执行
    
    zip -d your.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!