Intellij Junit 导致 java.lang.SecurityException: Manifest 主要属性的签名文件摘要无效

Intellij Junit causes java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

我正在尝试将 sendgrid 集成到我们处理电子邮件的存储库之一。但是我的 Junit 测试一直抛出上述异常。我已经浏览了这里的大部分帖子,讨论 运行ning jar 和 cglib 周围的问题,我确实下载了最新的 Mockito-all (1.10.19)。在排除签名文件后,我能够构建 jar 并将其发送到 运行,但我的问题是如何让 Junit 工作?

基本上我所做的就是尝试模拟 SendGrid class。

private SendGrid mockApiClient = Mockito.mock(SendGrid.class);

以下是我将其包含在项目中的方式:(是的,这就是常春藤)

<dependency org="com.sendgrid" name="sendgrid-java" rev="4.6.5" conf="uber-jar->default"/>

抛出异常的stacktrace如下:

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.ensureInitialization(JarFile.java:617)
    at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
    at sun.misc.URLClassPath$JarLoader.getManifest(URLClassPath.java:991)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:451)
    at java.net.URLClassLoader.access0(URLClassLoader.java:74)
    at java.net.URLClassLoader.run(URLClassLoader.java:369)
    at java.net.URLClassLoader.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:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2611)
    at java.lang.Class.getDeclaredFields(Class.java:1944)
    at org.junit.runners.model.TestClass.<init>(TestClass.java:49)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:75)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

发生这种情况是因为我之前下载了一个 fat jar。当我删除它时,清除我的缓存并重新提取所有我能够得到一个没有那些签名文件的 jar。

现在一切正常