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

时间:2012-08-14 22:11:47

标签: 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

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

7 个答案:

答案 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)

道林, 以下是其他一些尝试:

  • 确保您的项目正在使用:
    • 工作区默认值(假设默认值是您刚添加的jdk安装。从添加它的窗口中,确保选中它。),
    • jdk版本,或
    • 使用jdk版本的执行环境。
  • 拉出系统的环境变量,并将此路径添加到它:(jdk_dir)/ jre / bin。 (请记住,一旦你保存了它就必须重新启动Eclipse才能使它完成。)
  • 关闭eclipse,并修改用于启动它的快捷方式(jdk_dir)/ jre / bin。

我发现这些措施中的任何一个都允许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目录的内容?