jmockit:Attach J的本机库在此JRE错误中不可用

Dao*_*Lam 22 jmockit

我试图使用jmockit对我的项目进行单元测试并得到以下错误:

java.lang.UnsatisfiedLinkError: no attach in java.library.path
java.lang.IllegalStateException: Native library for Attach API not available in this JRE
    at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:95)
    at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:54)
    at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:21)
    at mockit.internal.startup.Startup.initializeIfNeeded(Startup.java:98)
    at mockit.internal.startup.Startup.initializeIfPossible(Startup.java:112)
    at org.junit.runner.Runner.<clinit>(Runner.java:22)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path
Run Code Online (Sandbox Code Playgroud)

我分别在类路径中包含了jdk6/lib/tools.jar,jmockit.jar和junit.jar.任何线索为什么会发生这种情况?

Mah*_*leh 47

转到项目的Java Build Path并更改JRE系统库并使其指向jdk而不是jre.


Rog*_*rio 9

这不是tools.jar您需要的,而是"Attach API"的本机库文件:( attach.dll或Linux/Mac等效attach.so或类似).普通JRE不包含此库.相反,将Eclipse指向JDK安装,该安装应包含该jre/bin/attach.dll文件.


小智 7

将attach.dll的路径添加到PATH环境变量中

  • 这个答案在"它有效"的意义上是正确的,但根本原因是使用jre而不是jdk.接受的答案应该是另一个. (9认同)

sas*_*uke 5

你必须设置代理。如果您使用 eclipse,则可以设置 VM 参数,Args 如下所示:

-javaagent:jmockit jar\jmockit.jar 的本地路径

例如:-javaagent:D:\jmockit.jar