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

问题描述

我正在尝试将sendgrid集成到处理电子邮件的仓库中。但是我的Junit测试不断抛出提到的异常。我在这里浏览了大多数关于运行jar和有关cglib的问题的文章,我确实将最新的Mockito-all(1.10.19)删除了。我可以构建jar并在排除签名文件后使其运行,但我的问题是如何使Junit正常工作?

基本上我只是想模拟SendGrid类。

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

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

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

引发的异常的堆栈跟踪如下:

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$2.getManifest(URLClasspath.java:991)
    at java.net.urlclassloader.defineClass(urlclassloader.java:451)
    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: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)

解决方法

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

现在一切正常