2012-08-14 13 views
19

yo estaba tratando de utilizar jmockit a la unidad a prueba mi proyecto y tengo el siguiente error:jmockit: biblioteca nativa para Adjuntar API no está disponible en este error JRE

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 classpath, respectivamente. ¿Alguna pista de por qué está pasando esto?

+0

Posible duplicado de [JMockit ERROR - Biblioteca nativa para la API de conexión no disponible en este JRE] (http://stackoverflow.com/questions/24868592/jmockit-error-native-library-for-attach-api-not- disponible-en-este-jre) –

Respuesta

37

Ir a Java Build Path de su proyecto y cambiar el JRE Biblioteca Sistema y hacer que apunta a la JDK en lugar de JRE.

6

No es tools.jar que necesita, pero el archivo de la biblioteca nativa para el "API Adjuntar": attach.dll (o el equivalente Linux/Mac, attach.so o similar). Un JRE simple no contiene esta biblioteca. En su lugar, apunte Eclipse a una instalación JDK, que debe contener el archivo jre/bin/attach.dll.

+0

Gracias. ¿Pero cómo señala Eclipse a una Instalación JDK? Intenté Window-> Java-> JRE instalados-> add-> directory of jdk. Pero eso no ayudó. –

+1

El uso de JDK en lugar de JRE funciona para mí. Gracias. –

+0

Esto funcionó para mí también. – Abi

6

añadir la ruta a attach.dll a su variable de entorno PATH

+9

Esta respuesta es correcta en el sentido de que "funciona", pero la causa principal es el uso de jre en lugar de jdk. La respuesta aceptada debería ser la otra. –

4

Usted tiene que fijar agente. Puede establecer argumentos de VM si está utilizando Eclipse y Args será así:

-javaagent: ruta de acceso local a su jmockit frasco \ jmockit.jar

por ejemplo: -javaagent: D: \ jmockit.jar

2

Dao Lam, Aquí están algunas otras cosas para probar:

  • Asegúrese de que su proyecto está utilizando ya sea:
    • El workspa ce default (Eso supone que el valor predeterminado es la instalación de jdk que acaba de agregar. Desde la ventana donde lo ha agregado, asegúrese de que esté marcado.),
    • La versión jdk, o
    • Entorno de ejecución que usa la versión jdk.
  • Extraiga las variables de entorno de su sistema y añádale esta ruta: (jdk_dir)/jre/bin. (Recuerda, tendrás que reiniciar Eclipse una vez que hayas guardado eso para que funcione).
  • Cierre eclipse y modifique el acceso directo que está utilizando para iniciarlo (jdk_dir)/jre/bin.

He encontrado que cualquiera de estas medidas permitirá a Eclipse encontrar el archivo attach.dll.

0

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 a ./bin. Esto eliminó la necesidad de actualizar Eclipse y una línea de comando de Cygwin con un JAVA_HOME no estándar.

¿Quizás la versión de Windows esté ignorando el contenido del directorio JRE?

+0

Esto no ayudaría si intenta compilar en otra máquina. – MKorsch

1

Parece que necesita apuntar su Eclipse a JDK, no a JRE.

Pasos: Windows-> Preferencias> Java> "JRE instalados" y eliminar JRE de la ventana "JRE instalado" y agregar la exploración JDK a su ubicación JDK y seleccionarla como predeterminada.

Cuestiones relacionadas