2012-03-05 2 views
4

При попытке запустить тест с JMockit на OpenJDK 6, я столкнулся ошибку: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/Библиотека/amd64 не решить эту проблему. Что еще я могу попробовать?

ответ

4

Попробуйте добавить <jdk6home>/lib/tools.jar на classpath, до jmockit.jar. Если это не решит проблему, то передать значение -javaagent:jmockit.jar в качестве параметра инициализации JVM обязательно.

1

Что я заметил в своем случае, я указывал на JRE6 вместо JDK6. Как только я укажу свой JAVA_HOME на jdk6, он зафиксировал проблему