IntelliJ Jar 错误:清单主要属性的签名文件摘要无效

pet*_*nce 3 java jar intellij-idea executable-jar java-8

我在一个系统上使用IntelliJIDE armx64 linux-based,我正在处理一个非 Maven java 项目,该项目有很多链接到它的模块(依赖项)。当从 IDE 运行我的项目时,一切正常,但是当将其构建为可运行的 jar 文件并尝试使用从终端运行该 jar 时java -jar myjar.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:330)
    at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:318)
    at java.util.jar.JarVerifier.update(JarVerifier.java:230)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
    at java.util.jar.JarFile.getInputStream(JarFile.java:450)
    at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:977)
    at sun.misc.Resource.cachedInputStream(Resource.java:77)
    at sun.misc.Resource.getByteBuffer(Resource.java:160)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:454)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Run Code Online (Sandbox Code Playgroud)

我目前正在使用 OpenJdk-1.8,我尝试使用 Oracle JDK v1.8 来构建然后重新运行 jar 文件,但仍然面临相同的错误。我还尝试创建一个新的简单的“Hello world”应用程序并为其导出相应的 jar,它成功运行且没有错误。

这是我的jar内部结构和相应的manifist文件: jar结构截图

pet*_*nce 6

感谢@y.bedrov链接到此问题,帮助我解决了错误,其中包括以下内容:

“sqljdbc4.jar”是OP外部库中的签名JAR。因此,按照上述方法系统地排除与签名相关的文件,如 .SF、.RSA 或 .DES 或其他算法文件是前进的正确方法。

是的,我也在使用“sqljdbc4.jar”,所以在阅读答案后,我决定通过从 jar 文件内的 Meta-inf 文件夹中删除签名文件来解决问题。