jmockit: la biblioteca nativa para Adjuntar API no está disponible en este error de JRE
(7)
Estaba intentando usar jmockit para probar mi proyecto en la unidad y obtuve el siguiente error:
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
He incluido jdk6 / lib / tools.jar, jmockit.jar y junit.jar en el classpath, respectivamente. ¿Alguna pista de por qué esto está sucediendo?
Agregue la ruta a attach.dll a su variable de entorno PATH
Dao Lam, aquí hay algunas otras cosas para probar:
- Asegúrese de que su proyecto esté utilizando:
- El valor predeterminado del espacio de trabajo (que asume que el valor predeterminado es la instalación jdk que acaba de agregar. Desde la ventana donde lo agregó, asegúrese de que esté marcada),
- La versión jdk, o
- Un entorno de ejecución que utiliza la versión jdk.
- Abra las variables de entorno de su sistema y agregue esta ruta: (jdk_dir) / jre / bin. (Recuerda, tendrás que reiniciar Eclipse una vez que hayas guardado eso para que lo tomes).
- Cierre eclipse y modifique el acceso directo que está utilizando para iniciarlo y usar (jdk_dir) / jre / bin.
Descubrí que cualquiera de estas medidas permitirá que Eclipse encuentre el archivo attach.dll.
Encontré este problema con JDK 1.8.45 y 1.8.80 en Windows de 64 bits. Mi solución fue copiar attach.dll desde el directorio ./jre/bin del JDK al ./bin. Esto eliminó la necesidad de actualizar Eclipse y una línea de comandos de Cygwin con un JAVA_HOME no estándar.
¿Quizás la versión de Windows puede estar ignorando el contenido del directorio JRE?
No es tools.jar
que necesita, sino el archivo de biblioteca nativo para "Attach API": attach.dll
(o el equivalente de Linux / Mac, attach.so
o similar). Un JRE simple no contiene esta biblioteca. En su lugar, apunte Eclipse a una instalación de JDK, que debe contener el archivo jre/bin/attach.dll
.
Parece que necesitas apuntar tu Eclipse a JDK, no a JRE.
Pasos: Windows-> Preferencias> Java> "Instalar JRE" y eliminar JRE de la ventana "Instalar JRE" y agregar la búsqueda de JDK a su ubicación de JDK y seleccionar como predeterminado.
Tienes que configurar el agente. Puede establecer argumentos de VM si está utilizando eclipse y Args será así:
-javaagent: ruta local a tu jmockit jar / jmockit.jar
por ejemplo: -javaagent: D: / jmockit.jar
Vaya a Java Build Path de su proyecto y cambie la biblioteca del sistema JRE y haga que apunte al jdk en lugar de a jre.