【发布时间】:2018-05-11 08:54:58
【问题描述】:
jmockit 无法在 Eclipse 中初始化: java.lang.IllegalStateException:在 JDK 9 上运行需要 -javaagent:/jmockit-1.n.jar 或 -Djdk.attach.allowAttachSelf
如果我添加 -Djdk.attach.allowAttachSelf VM 参数,它可以正常工作。
为什么我需要添加那个参数? jmockit 并没有说在 JDK 9 上运行时需要。是的,JRE 系统库指向 JDK,是的,jmockit jar 按外部库的顺序位于 junit 之上。
版本:JUnit 4.12、Java jdk 9.0.1、jmockit 1.37、hamcrest core 1.3
java.lang.ExceptionInInitializerError 在 testClass.testMethod(testClass.java:20) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:564) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:539) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207) 原因:java.lang.IllegalStateException:在 JDK 9 上运行需要 -javaagent:/jmockit-1.n.jar 或 -Djdk.attach.allowAttachSelf 在 mockit.internal.startup.AgentLoader.attachToRunningVM(AgentLoader.java:155) 在 mockit.internal.startup.AgentLoader.loadAgent(AgentLoader.java:60) 在 mockit.internal.startup.Startup.verifyInitialization(Startup.java:137) 在 mockit.Invocations.(Invocations.java:26) ... 24 更多
【问题讨论】:
-
请注意,JMockit 确实在异常消息中说在 JDK 9 上它是必需的(好吧,或者使用
-javaagent)!比大多数人从未阅读过的文档更好... -
@Rogerio,哈,我总是在阅读文档时遇到麻烦......
标签: java eclipse junit java-9 jmockit