J'essayais d'utiliser jmockit pour tester mon projet et j'ai eu l'erreur suivante:
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
J'ai inclus respectivement jdk6/lib/tools.jar, jmockit.jar et junit.jar dans le chemin d'accès aux classes. Des indices pourquoi cela se passe?
Allez dans Chemin de construction Java de votre projet et modifiez la Bibliothèque système JRE et faites-la pointer vers le jdk au lieu de jre.
Ce n'est pas tools.jar
dont vous avez besoin, mais le fichier de bibliothèque native pour "Attach API": attach.dll
(ou l'équivalent Linux/Mac, attach.so
ou similaire). Un JRE simple ne contient pas cette bibliothèque. A la place, pointez Eclipse sur une installation JDK, qui devrait contenir le fichier jre/bin/attach.dll
.
Ajoutez le chemin d'accès à attach.dll à votre variable d'environnement PATH
Vous devez définir agent. Vous pouvez définir VM arguments si vous utilisez Eclipse et Args ressemblera à ceci:
-javaagent: chemin d'accès local à votre jar jmockit\jmockit.jar
par exemple: -javaagent: D:\jmockit.jar
On dirait que vous devez diriger votre Eclipse vers JDK, pas JRE.
Étapes: Windows-> Préférences> Java> "JRE installés" et supprimez JRE de la fenêtre "Installé JRE" et ajoutez JDK parcourant à votre emplacement JDK et sélectionnez par défaut.
Dao Lam, Voici quelques autres choses à essayer:
J'ai trouvé que l'une de ces mesures permettrait à Eclipse de trouver le fichier attach.dll.
J'ai trouvé ce problème avec JDK 1.8.45 et 1.8.80 sur Windows 64 bits. Ma solution consistait à copier attach.dll du répertoire ./jre/bin du JDK vers le ./bin. Cela éliminait le besoin de mettre à jour Eclipse et une ligne de commande Cygwin avec un Java_HOME non standard.
Peut-être que la version Windows ignore peut-être le contenu du répertoire JRE?