2012-03-05 70 views
4

當試圖OpenJDK的6運行與JMockit測試,我面對的錯誤:jmockit,OpenJDK的和UnsatisfiedLinkError

[junit] Exception in thread "main" java.lang.ExceptionInInitializerError 
[junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:353) 
[junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052) 
[junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906) 
[junit] Caused by: java.lang.IllegalStateException: Native library for Attach API not available in this JRE 
[junit]  at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:81) 
[junit]  at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:54) 
[junit]  at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:21) 
[junit]  at mockit.internal.startup.Startup.initializeIfNeeded(Startup.java:200) 
[junit]  at mockit.internal.startup.Startup.initializeIfPossible(Startup.java:215) 
[junit]  at junit.framework.TestResult.<clinit>(TestResult.java:19) 
[junit]  ... 3 more 
[junit] Caused by: java.lang.UnsatisfiedLinkError: sun.tools.attach.LinuxVirtualMachine.isLinuxThreads()Z 
[junit]  at sun.tools.attach.LinuxVirtualMachine.isLinuxThreads(Native Method) 
[junit]  at sun.tools.attach.LinuxVirtualMachine.<clinit>(LinuxVirtualMachine.java:364) 
[junit]  at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:71) 
[junit]  ... 8 more 

我看了夾在/ usr /本地/ openjdk6/JRE/lib目錄/ AMD64內/發現libattach.so

但是加入-Djava.library.path =在/ usr /本地/ openjdk6/JRE/lib目錄/ AMD64沒有解決的問題。我還能嘗試什麼?

回答

4

嘗試將<jdk6home>/lib/tools.jar添加到類路徑中,之前 jmockit.jar。如果這不能解決問題,那麼肯定應該將-javaagent:jmockit.jar作爲JVM初始化參數。

1

我在我的案例中注意到我指向的是JRE6而不是JDK6。只要我將我的JAVA_HOME指向jdk6,它就解決了問題