【问题标题】:Error java.lang.SecurityException: Invalid signature file digest for Manifest main attributes错误 java.lang.SecurityException:Manifest 主要属性的签名文件摘要无效
【发布时间】:2022-06-30 21:45:48
【问题描述】:

我正在使用我们的 Java 服务中的 sendGrid maven 依赖项使用 sendGrid API 发送电子邮件。

<dependency>
        <groupId>com.sendgrid</groupId>
        <artifactId>sendgrid-java</artifactId>
        <version>4.9.2</version>
    </dependency>

我们为我们的服务创建一个胖 jar 来执行它。 但是添加了这个依赖后,fat jar 没有执行,给出 SecurityException: Invalid signature file

这是错误的堆栈跟踪:

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 java.base/sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:340)
        at java.base/sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:282)
        at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:327)
        at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:239)
        at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:762)
        at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1033)
        at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:72)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:888)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:848)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:488)
        at java.base/java.lang.Class.forName(Class.java:467)
        at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:790)
        at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:685)

【问题讨论】:

    标签: java maven jar maven-plugin sendgrid


    【解决方案1】:

    所以,我们需要在创建 fat jar 时过滤签名文件。 在maven-shade-plugin中添加过滤器

                       <configuration>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                         </configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2014-04-29
      • 2019-03-03
      • 2021-05-17
      • 2020-07-15
      相关资源
      最近更新 更多