我试图使用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
我分别在类路径中包含了jdk6 / lib / tools.jar,jmockit.jar和junit.jar。任何线索为什么会发生这种情况?
答案 0 :(得分:43)
转到项目的 Java Build Path 并更改 JRE系统库,并使其指向 jdk 而不是jre。< / p>
答案 1 :(得分:8)
您需要的不是tools.jar
,而是“Attach API”的本机库文件:attach.dll
(或等效的Linux / Mac,attach.so
或类似文件)。普通JRE不包含此库。相反,将Eclipse指向JDK安装,该安装应包含jre/bin/attach.dll
文件。
答案 2 :(得分:7)
将attach.dll的路径添加到PATH环境变量
答案 3 :(得分:4)
你必须设置代理。 如果你正在使用eclipse,你可以设置VM参数,Args将是这样的:
-javaagent:你的jmockit jar \ jmockit.jar的本地路径
例如:-javaagent:D:\ jmockit.jar
答案 4 :(得分:2)
我发现这些措施中的任何一个都允许Eclipse找到attach.dll。
答案 5 :(得分:2)
看起来您需要将Eclipse指向JDK,而不是JRE。
步骤:Windows-&gt;偏好设置&gt; Java&gt;“已安装的JRE”并从“已安装的JRE”窗口中删除JRE,并将JDK浏览添加到JDK位置并选择为默认值。
答案 6 :(得分:0)
我在64位Windows上发现了JDK 1.8.45和1.8.80的这个问题。我的解决方案是将attach.dll从JDK的./jre/bin目录复制到./bin。这消除了使用非标准JAVA_HOME更新Eclipse和Cygwin命令行的需要。
也许Windows版本可能忽略了JRE目录的内容?