web-dev-qa-db-fra.com

jmockit: la bibliothèque native de l'API de liaison n'est pas disponible dans cette erreur JRE

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?

22
Dao Lam

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.

40
Mahmoud Saleh

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.

8
Rogério

Ajoutez le chemin d'accès à attach.dll à votre variable d'environnement PATH

7
savedme

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

4
sasuke

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.

2
supernova

Dao Lam, Voici quelques autres choses à essayer: 

  • Assurez-vous que votre projet utilise soit:
    • La valeur par défaut de l’espace de travail (Cela suppose que l’installation par défaut est celle que vous venez d’ajouter. Dans la fenêtre où vous l’avez ajouté, assurez-vous que la case est cochée.), 
    • La version jdk, ou 
    • Un environnement d'exécution qui utilise la version de jdk.
  • Extrayez les variables d'environnement de votre système et ajoutez-y ce chemin: (jdk_dir)/jre/bin. (N'oubliez pas que vous devrez redémarrer Eclipse une fois que vous aurez sauvegardé cela pour le faire prendre).
  • Fermez Eclipse et modifiez le raccourci que vous utilisez pour le démarrer afin d’utiliser (jdk_dir)/jre/bin.

J'ai trouvé que l'une de ces mesures permettrait à Eclipse de trouver le fichier attach.dll.

2
jchess

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?

0
user5601840